《java入门第一季》之面向对象(重头戏多态)

来源:互联网 发布:摄影后期软件 编辑:程序博客网 时间:2024/05/18 12:32

接下来介绍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()。所以报错。错误描述:找不到符号}}那么应该怎么解决这个问题呢?向下转型。会在下一篇文章中对向下转型做出介绍。

1 0