本文主要讲述java中的多态性质
代码结构如图:
Animal类:
public class Animal { private String name; public Animal(String name) { this.name = name; } public void eat(){ System.out.println("animal在吃..."); } private void sleep(){ System.out.println("animal在睡觉..."); } }
Cat类:
public class Cat extends Animal{ // 调用父类的带参构造器 public Cat(String name) { super(name); } public void eat(){ System.out.println("猫吃鱼..."); } public void CatchMouse(){ System.out.println("猫抓老鼠..."); } }
PloyDetail类:
public class PloyDetail { public static void main(String[] args) { Animal animal = new Cat("大黄"); // animal.CatchMouse(); animal.eat(); animal.sleep(); } }
运行结果:
说明,编译阶段a是A的对象,但是在运行时,仍然按照子类的具体实现,即new ...,调用方法,先在具体实现的类中查找,如果没有再去父类中继续查找,例如eat()方法,子类Cat有该方法,直接调用,而sleep()方法,子类Cat中没有该方法,查看父类,父类中有sleep()方法,调用该方法。
使用多态注意细节:
① 多态的使用前提是继承,具体细节如下:
向上转型:父类的引用指向了子类的对象,语法:父类类型引用名 = new 子类类型();
② 可以调用父类的所有成员(遵循访问权限),但是不能调用子类的特有成员,原因如下:
A a = new B(),A是B的父类,在编译阶段,a是A类的对象,能调用哪些成员,是由编译类型决定的。
③ 最终运行效果看子类的具体实现,调用方法时,按照从子类开始查找方法,如果子类没有,就从其父类查找,一层一层查找下去。最后,如果还是没有该方法,就报错。
标签:java,name,子类,多态,Cat,animal,父类,public From: https://www.cnblogs.com/zwgitOne123/p/16982397.html