JavaSe基础XX10——面向对象——[多态]

来源:互联网 发布:linux安装镜像文件 编辑:程序博客网 时间:2024/06/04 18:43

*多态——Java的第三个特性


abstract class Animal{abstract void eat();}class Dog extends Animal{void eat(){System.out.println("啃骨头");}void lookHome(){System.out.println("看家");}}class Cat extends Animal{void eat(){System.out.println("吃鱼");}void catchMouse(){System.out.println("抓老鼠");}}class Pig extends Animal{void eat(){System.out.println("饲料");}void gongDi(){System.out.println("拱地");}}



多态的好处:提高了代码的扩展性,前期定义的代码可以使用后期的内容。

*多态的弊端

多态的弊端:前期定义的内容不能使用(调用)后期子类的特有内容。


多态的前提:

1,必须有关系,继承,实现。
2,要有覆盖。

 *多态的转型

class DuoTaiDemo {public static void main(String[] args) {//Cat c = new Cat();//c.eat();//c.catchMouse();Animal a = new Cat(); //自动类型提升,猫对象提升了动物类型。但是特有功能无法s访问。//作用就是限制对特有功能的访问。//专业讲:向上转型。将子类型隐藏。就不用使用子类的特有方法。//a.eat();//如果还想用具体动物猫的特有功能。 //你可以将该对象进行向下转型。//Cat c = (Cat)a;//向下转型的目的是为了使用子类中的特有方法。//c.eat();//c.catchMouse();//注意:对于转型,自始自终都是子类对象在做着类型的变化。//Animal a1 = new Dog();//Cat c1 = (Cat)a1;//ClassCastException<span style="white-space:pre"></span>}}


/*毕老师和毕姥爷的故事。*/class 毕姥爷{void 讲课(){System.out.println("管理");}void 钓鱼(){System.out.println("钓鱼");}}class 毕老师 extends 毕姥爷{void 讲课(){System.out.println("Java");}void 看电影(){System.out.println("看电影");}}class  DuoTaiDemo2{public static void main(String[] args) {//毕老师 x = new 毕老师();//x.讲课();//x.看电影();毕姥爷 x = new 毕老师();x.讲课();x.钓鱼();毕老师 y = (毕老师)x;//ClassCastExceptiony.看电影();}}

*多态——类型判断

关键字 instance

public static void method(Animal a)//Animal a = new Dog();{a.eat();if(a instanceof Cat)//instanceof:用于判断对象的具体类型。只能用于引用数据类型判断 instance后面可以是类或者是接口////通常在向下转型前用于健壮性的判断。{Cat c = (Cat)a;c.catchMouse();}else if(a instanceof Dog){Dog d = (Dog)a;d.lookHome();}else{}}

instance常用于判断!

*多态——成员变量特点




小结:


*多态——成员函数的特点。重点!



问题来了:为什么不会调用父类的show()方法?????


小结:


*多态——静态函数的特点



回顾:为什么非静态函数调用的子类的,因为成员函数的调用依赖于对象。必须动态绑定到指定对象上。

而到了静态方法上,就不一样了。


可以这样理解,静态方法不涉及多态性

小结:




0 0