概述

 

面向对象三个特征:封装,继承,多态。

 

找对象,建立对象,使用对象,维护对象之间关系。

 

类和对象关系:

类:对现实生活中事物的描述。即class定义的类。

对象:就是这类事物,事实存在的个体。对应于java中new的实体。  对象指向实体。  

 

定义类:就是在描述事物,就是定义属性和行为,行为对应为方法。

定义类的时候,属性如果不赋值,会自动进行初始化值,如果赋值,为显示初始化值。

 

类的属性为成员变量:作用于整个类中,存在于堆内存中。

局部变量:作用于函数中,或者语句中,存在于栈内存中。

 

main()函数为程序入口,包含main的类可以独立运行。

 

例子:

class Zx {
  public static void main(String args[])
  {
 
   Car zx = new Car();
   zx.ran();
   zx.color="blue";
   zx.ran();
 
  }
}
 class Car
 {
  String color="红色";
  int num = 4;
  void ran()
  {
   System.out.println(color+".."+num);
  }
 }

 

匿名对象:

使用方式一:当对对象的方法治=只调用一次时,可以用匿名对象来完成。比较简单,如果对一对象进行多个成员调用,必须起名字。

使用方式二:可以将匿名对象作为实际参数进行传递。

例一:

new Car().num = 5; //成为垃圾

new Car().colur = "blue";//成为垃圾

new Car().ran();//成为垃圾,但是可以运行对象的方法

 

例二:

public static void show (Car c) //主类中的一个方法。

{

c.num = 3;

c.color = "black";

c.ran();

}

 

show(new Car()); //show 中的c 指向 new Car() ,不为垃圾,当show()生命周期结束后,变为垃圾。

 

 

特征一:封装:

 

 

封装:隐藏对象的属性和实现细节,仅提供公共的访问方式。

 

封装原则:

将不需要对外提供的内容都隐藏起来。

把属性都隐藏,提供公共方法对其访问。

 

 

private: 私有,权限修饰符,用于修饰类中成员(属性,方法)

私有是封装的一种表现形式。

例:

class Zx {
  public static void main(String args[])
  {
 
  Persion p = new Persion();
p.age=-20;
  p.speak();
  }
}
 class Persion
 {
  int age;
  void speak()
  {
   System.out.println(age);
  }
 }
 
out:-20;
 
私有后:
 
 class Zx {
  public static void main(String args[])
  {
 
  Persion p = new Persion();
  //p.age=-20; 会报错 
  p.speak();
  }
}
 class Persion
 {
  private int age;
//可以利用一个public void getAge(int a) {   age=a;                     } 对外方法来提供传递方式。
  void speak()
  {
   System.out.println(age);
  }
 }

 

构造函数

特点:

函数名与类名相同

不定义返回值类型

不可写return语句

只在对象建立时执行一次

new 新实体时就会运行

当一个类中没有定义构造函数时,系统会给该类自动添加一个空参数的构造函数。 

当方法没有名字时,叫构造代码块,作用给对象进行初始化,对象一建立就运行了,而且优先于构造函数先执行。定义的是不同对象的共同性初始化内容,当构造方法重载时写。

 

例:

 

class Zx
 {
  public static void main(String args[])
  {
  Persion p = new Persion();
 
  }
}
 class Persion
 {
 Persion()
 {
  System.out.println("Persion ran()");
 }
 }

//会直接输出"Persion ran()" ,因为对象一建立,就会调用与之对应的构造函数。作用:可以给对象进行初始化。

 

构造函数可以重载,函数名仍然为类名,根据 new Persion(int n);参数来决定执行哪个构造函数。

 

 

this:            

this代表它所在函数所属对象的引用。

 

 

1当局部变量(包含函数的大括号内)和成员变量(函数内变量)重名时,使用this

例如:

class Zx {
  public static void main(String args[])
  {
  Persion p = new Persion("zhangxu");
  p.speak();
  }
}
 class Persion
 {
  String name;
 Persion(String name)
 {
  this.name=name;//this.name代表局部变量
 }
 void speak(){
  System.out.println(name);
 }
 }

2

构造函数间调用用this(name)初始化,this 语句只能定义在构造函数的第一行。

 

3

当定义类中功能时,但凡本类功能内部使用了本类对象,这个时候用this表示这个对象

 

 

class Zx {
  public static void main(String args[])
  {
  Persion p1 = new Persion(20);
  Persion p2 = new Persion(25);
  boolean v = p1.compare(p2);
  System.out.println(v);
  }
}
 class Persion
 {
  private String name;
  private int age;
  Persion(int age)
  {
   this.age=age;
  }
  Persion(String name)
  {
   this.name=name;
  }
  Persion(String name,int age)
  {
   this.name=name;
   this.age=age;
   
  }
 
  public boolean compare(Persion p)
  {
  rerturn this.age==p.age;
  }
 }