Java面向对象

一、引用
1. Java语言中除基本类型之外的变量类型都称之为引用类型。
2. Java中的对象是通过引用对其操作的。
* A a = new A( ); 中,a是对象的引用,位于栈内存,指向位于堆内存的对象的实体,也就是
new A( )。

二、构造方法
1. 构造方法与类同名且没有返回值。
2. 当没有指定构造方法时,编译器为类自动添加形如 类名( ) { } 的构造方法。

三、方法的重载
1. 方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。调用时,会根据不同的参数表选择对应的方法。
2. 构造方法也可以重载。

四、类的继承
1. Java中使用extends关键字实现类的继承机制。
2. 通过继承,子类自动拥有了基类(superclass)的所有成员(成员变量和方法)。
3. Java只支持单继承,不允许多继承。
* 一个子类只能有一个基类,一个基类可以派生出多个子类。

五、访问权限

修饰符类内部同一个包子类任何地方
privateyes
defaultyesyes
protectedyesyesyes
publicyesyesyesyes

六、方法的重写
1. 在子类中可以根据需要对从基类中继承来的方法进行重写。
2. 重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型。
3. 重写方法不能使用比被重写方法更严格的访问权限。

七、继承中的构造方法
1. 子类的构造过程中必须调用其基类的构造方法。
2. 子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。
* 使用this(argument_list)调用本类另外的构造方法。
* 如果调用super,必须写在子类构造方法的第一行。
3. 如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用基类无参的构造方法。
4. 如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。

八、equals方法和“==”关系操作符
1. 对于==,如果作用于基本数据类型的变量,则直接比较其存储的“值”是否相等;
如果作用于引用类型的变量,则比较的是所指向的对象的地址。
2. 对于equals方法,注意:equals方法不能作用于基本数据类型的变量
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

九、对象转型
1. 一个基类的引用类型变量可以“指向”其子类的对象。
2. 一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。
3. 可以使用 引用变量 instanceof 类名 来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。
4. 子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之成为向下转型(downcasting)。

十、动态绑定和多态
1. 动态绑定是指在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
2. 使用条件:①要有继承,②要有重写,③父类引用指向子类对象。

abstract class Animal {
private String name;

Animal(String name) {this.name = name;}

public abstract void enjoy();
}

class Cat extends Animal { //继承
private String eyesColor;

Cat(String n,String c) {super(n); eyesColor = c;}

public void enjoy() { //重写
System.out.println("猫叫");
}
}

class Dog extends Animal {
private String furColor;

Dog(String n,String c) {super(n); furColor = c;}

public void enjoy() {
System.out.println("狗叫");
}
}

class Lady {
private String name;

private Animal pet;

Lady(String name, Animal pet) {
this.name = name;
this.pet = pet;
}

public void myPetEnjoy() {pet.enjoy();}
}

public class Test {
public static void main(String[] args){
Cat c = new Cat("catname", "blue");
Dog d = new Dog("dogname", "black");

Lady l1 = new Lady("l1", c); //父类引用指向子类对象
Lady l2 = new Lady("l2", d);

l1.myPetEnjoy();
l2.myPetEnjoy();
}
}

十一、接口
1. 接口是抽象方法和常量值的定义的集合。
2. 从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
3. 接口定义举例:

public interface Runner {
int id = 1;

public void start();
public void run();
public void stop();
}

4. 接口特性:
①多个无关的类可以实现同一个接口。
②一个类可以实现多个无关的接口。
③与继承关系类似,接口与实现类之间存在多态性。
④接口中声明属性默认为public static final的,也只能是public static final的。
⑤接口中只能定义抽象方法,而且这些方法默认为public的,也只能是public的。
⑥接口可以继承其他的接口,并添加新的属性和抽象方法。

最后,理解Java面向对象最重要的方法就是画内存图进行分析。

发表评论

电子邮件地址不会被公开。 必填项已用*标注