父类引用指向子类对象,其实要从Java的多态说起了!那么,何为多态呢?
多态:
多态指的是同一个方法调用,由于对象不同可能会有不同的行为。
举个例子来说:
1.工作之余人都要休息,同样是调用人的“休息”方法,但不同的人有不同的休息方式。比如张三是睡觉,李四是旅游,王五是做数学题;
2. 同样是调用人“吃饭”的方法,中国人用筷子吃饭,英国人用刀叉吃饭,印度人用手吃饭。
现在差不多对多态有一点点了解了吧!
类型转换:
对象的类型转换分为:向上转型和向下转型
向上转型——父类引用指向子类对象,属于自动类型转换
如:Person person = new Student();
向下转型——需要强制类型转换
下面展示一些 代码片段
//定义一个动物类
public class Animal {
public void shout() {
System.out.println("叫了一声!");
}
}
//定义一个狗类,继承自Animal
class Dog extends Animal {
public void shout() {
System.out.println("旺旺旺!");
}
public void seeDoor() {
System.out.println("看门中....");
}
}
//定义一个猫类,继承自Animal
class Cat extends Animal {
public void shout() {
System.out.println("喵喵喵喵!");
}
}
测试类:
public class Test {
public static void main(String[] args) {
Animal a1 = new Cat(); // 向上可以自动转型
// 传的具体是哪一个类就调用哪一个类的方法。大大提高了程序的可扩展性。
animalCry(a1);
Animal a2 = new Dog();
animalCry(a2);//a2 为编译类型,Dog 对象才是运行时类型。
/*编写程序时,如果想调用运行时类型的方法,只能进行强制类型转换。
* 否则通不过编译器的检查。*/
Dog dog = (Dog)a2;//向下需要强制类型转换
dog.seeDoor();
}
static void animalCry(Animal a) {
a.shout();
}
}
运行结果如下图所示:
总之,父类引用子类的对象就是:编译看左边,运行看右边。
本文是根据作者本人学习和参考相关书籍编写,作者水平有限,如有错误,欢迎大家提出来;或者有不周到的地方,欢迎大家补充。
版权所有,转载请附上该文档链接!