多态的两种转型(向上转型&向下转型)
作者:互联网
注:向上转型 只能调用父类拥有的 想下转型则可以调用 子类特有的
第一种:向上转型
public class Main {
public static void main(String[] args) {
MaoMao m = new MaoMao();
Fun(m); // 向上转型 不能调用子类特有功能 如:MaoMao中的 wan() 方法
Fun(new GouGou());
}
public static void Fun(DongWu m){
m.chi();
}
}
abstract class DongWu{ //抽象类;动物
public abstract void chi(); //抽象方法:让子类都得写
}
class MaoMao extends DongWu{ // 继承:父类DongWu 并需要重写 方法chi
@Override
public void chi() {
System.out.println("我是小猫!我吃鱼!!!");
}
}
class GouGou extends DongWu{ //同上
@Override
public void chi() {
System.out.println("我是小狗!我吃肉!!!");
}
}
第二种:向下转型
public class Main {
public static void main(String[] args) {
// 向上转型 只能调用父类拥有的 想下转型则可以调用 子类特有的
DongWu m = new MaoMao();// m猫对象的地址
m.chi(); // 调用的是 MaoMao的chi()
// 方法1:
MaoMao mao = (MaoMao)m;// 要调用子类的功能 向下转型 把父类强制转为子类
mao.wan();
//方法2:
//((MaoMao) m).wan(); 也可以先写为复合语句 一句明了
DongWu g = new GouGou();
g.chi();
((GouGou) g).wan2();
}
}
abstract class DongWu { //抽象类;动物
public abstract void chi(); //抽象方法:让子类都得写
}
class MaoMao extends DongWu { // 继承:父类DongWu 并需要重写 方法chi
@Override
public void chi() {// 共同功能
System.out.println("我是小猫!我吃鱼!!!");
}
public void wan() {//特有功能
System.out.println("我是小猫!我喜欢玩皮球!!!");
}
}
class GouGou extends DongWu { //同上
@Override
public void chi() {//共同功能
System.out.println("我是小狗!我吃肉!!!");
}
public void wan2() {// 特有功能
System.out.println("我是小狗!我喜欢洗澡!!!");
}
}
标签:MaoMao,chi,void,转型,多态,DongWu,class,向下,public 来源: https://blog.csdn.net/weixin_45014583/article/details/111597503