引用多态:向上转型
1. 什么是多态?
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
2. 什么是向上转型?
父类的引用指向其一个子类的对象,即为向上转型。
①当子类没有定义与父类相同的属性,也没有重写父类的方法时,调用的都是父类的。
父类:
package day1;
public class Father {
public String name = "father";
public void show(){
System.out.println("I am father.");
}
}
子类:
package day1;
public class Son extends Father{
}
测试类:
package day1;
public class Application {
public static void main(String[] args) {
//子类对象指向父类引用
Father f = new Son();
System.out.println(f.name);
f.show();
}
}
执行结果:
father
I am father.
②当子类定义了与父类相同的属性,并重写了父类的方法时,调用的是父类的属性,子类的方法。
子类(父类同上):
package day1;
public class Son extends Father{
public String name = "son";
@Override
public void show() {
System.out.println("I am son.");
}
}
测试类:
package day1;
public class Application {
public static void main(String[] args) {
//子类对象指向父类引用
Father f = new Son();
System.out.println(f.name);
f.show();
}
}
执行结果:
father
I am son.
结论:
不难理解,因为属性是一个变量,不能被重写,则不论怎样它都是父类的,而父类方法被子类重写了后则调用的是子类重写之后的方法了。
③子类重写父类方法后,给子类新增独有方法,
子类(父类同上):
public class Son extends Father{
public String name = "son";
//子类特有的属性
public int age = 18;
@Override
public void show() {
System.out.println("I am son.");
}
//子类特有的方法
public void study(){
System.out.println("go to school.");
}
}
测试类:
执行结果:
出现报错
结论:
不难理解,当父类引用指向子类对象时,子类不能定义独有的属性和方法。