多态的一些问题,写的很简陋,希望大家不要介意。话不多说,直接上代码。
父类的方法:
package com.example.vm510l.myapplication;
public class Animal {
public void eat(){
System.out.println("吃东西");
}
public void run(){
System.out.println("移动");
}
}
子类的方法
package com.example.vm510l.myapplication;
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("我吃鱼");
}
public void jump(){
System.out.println("我会跳");
}
}
测试方法
package com.example.vm510l.myapplication;
public class Test {
public static void main(String[] args) {
Animal a = new Cat();
a.eat();
a.run();
// a.jump(); 编译通不过
((Cat) a).jump();
}
}
然后大家猜猜一下,会输出什么东西。
输出结果为:
//我吃鱼
//移动
//我会跳
总结:通过上面的例子说明:
只能调用被子类复写的方法(即子类和父类都有的方法),
我们如果想调用父类的run方法呢,就是用super.run();这样调用的就只是父类的方法了,因为子类继承父类的时候如果有相同的方法的话,父类的方法会被子类覆盖。
(如果子类没有复写,没有这个方法,则去父类查询,父类如果有,则调用)
(如果子类有,而父类没有,调用此方法,编译通不过,这时候得向下转型一下,才能调用,如代码所示)
如果父类有个变量,子类也有一个不同的变量,则调用的时候一直是执行父类里面的变量
(如果父类的方法是私有的,但是子类的方法是自己的,即是子类方法名字和父类名字相同,但是和父类没有一点关系)