多态关键词:向上转型、动态绑定
public class Person {
public void say(){
System.out.println("Person.say");
}
}
public class Man extends Person{
public void say(){
System.out.println("Man.say");
}
}
public class Women extend Person{
public void say(){
System.out.println("Women.say");
}
}
Person person = new Person();//当然没有问题;
Person person = new Man();//向上转型(把某个对象的引用视为对其基类型的引用),向上转型会缩小接口范围,但不会比基类的全部接口更zh
public class Test {
public static void main(String[] args) {
Test.operate(new Man());
Test.operate(new Women());//man对象和women向上转型为person
}
public static void operate(Person person) {
person.say();//动态绑定,调用对应的say
}
}
动态绑定或运行时绑定或后期绑定都是多态的意思,编程语言想实现后期绑定,就必须具有某种机制,以便在运行时能判断对象的类型,从而调用恰当的方法(当然这种实现是java在编译的时候就在对象内存中安置了”类型信息“);
动态绑定只针对方法而言;
java中除了static方法和final方法之外,其他所有的方法都是后期绑定。在编译时,编译器不需要获得任何特殊信息就能进行正确的调用,这意味着我们不必判定是否应该进行后期绑定,而是会自动发生的——java多态原理