接下来介绍java第三大特性——多态性
/* 多态:同一个对象(事物),在不同时刻体现出来的不同状态。 举例: 猫是猫,猫是动物。 水(液体,固体,气态)。 多态的前提: A:要有继承关系。 B:要有方法重写。 其实没有也是可以的,但是如果没有这个就没有意义。 动物 d = new 猫(); d.show(); 动物 d = new 狗(); d.show(); C:要有父类引用指向子类对象。 父 f = new 子(); 用代码体现一下多态。 多态中的成员访问特点: A:成员变量 编译看左边,运行看左边。 B:构造方法 创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。 C:成员方法 编译看左边,运行看(右边)。 D:静态方法 编译看左边,运行看左边。 静态和类相关,算不上重写,所以,访问还是左边的 然而由于成员方法存在方法重写,所以它运行看右边。 */ class Fu { public int num = 100; public void show() { System.out.println("show Fu"); } public static void function() { System.out.println("function Fu"); } } class Zi extends Fu { public int num = 1000; public int num2 = 200; public void show() {//对父类的方法重写 System.out.println("show Zi"); } public void method() {//自己的方法 System.out.println("method zi"); } public static void function() {//静态方法也要“重写”,其实不算是重写 System.out.println("function Zi"); } } class DuoTaiDemo { public static void main(String[] args) { //要有父类引用指向子类对象。 //父 f = new 子(); Fu f = new Zi(); System.out.println(f.num); //找不到符号,父类中没有num2 //System.out.println(f.num2); f.show(); //找不到符号,父类中没有method() //f.method(); f.function(); } }执行结果是:100
show Zi
function Fu
多态的弊端:
/* 多态的弊端: 不能使用子类的特有功能。 */ class Fu { public void show() { System.out.println("show fu"); } } class Zi extends Fu { public void show() { System.out.println("show zi"); } public void method() { System.out.println("method zi"); } } class DuoTaiDemo3 { public static void main(String[] args) { //测试 Fu f = new Zi(); f.show(); f.method();//由于父类中没有method()。所以报错。错误描述:找不到符号 } } 那么应该怎么解决这个问题呢?向下转型。会在下一篇文章中对向下转型做出介绍。