重载VS重写
重载:
- 方法名相同
- 参数列表不同(无论是参数的类型,数量还是顺序)
- 对方法的返回值不做要求
重写:
1:方法名相同
2:参数列表相同(参数类型,数量,顺序)
3:返回值相同(协变类型[返回值之间有继承关系])
向下转型VS向上转型
定义一个类:People
定义一个类:Student
Student继承People
class People{
private int age;
private String name;
public void printMessage(){
System.out.println("People的printMessage方法");
}
}
class Student extends People{
public void printMessage(){
System.out.println("Student的printMessage方法");
}
public void studentMethod(){
System.out.println("Student特有的方法");
}
}
向上转型:
父类的引用指向子类的对象。
向下转型:
子类的引用指向父类的对象,但是向下转型并不安全,因为它无法判断,转型的类和被转型的类的继承关系。可以使用instanceof提前判断。
动态绑定VS静态绑定:
动态绑定(运行时绑定):
动态绑定为多态的基础,当父类的引用指向子类对象后,调用子类被重写的方法,则会执行子类重写后的方法。
为什么称为动态绑定,因为在编译后,字节码文件中,调用的仍然是父类的方法,直到运行时才会执行子类的重写的方法。
静态绑定(编译时绑定):
因为重载的方法在编译后即使方法名相同,但对应的方法签名有区别,编译器在编译时就已经确定使用哪一个重载的方法。