多态的两种转型(向上转型&向下转型)

注:向上转型 只能调用父类拥有的 想下转型则可以调用 子类特有的
第一种:向上转型

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("我是小狗!我喜欢洗澡!!!");
    }
}
上一篇:数理统计17:正态总体参数假设检验


下一篇:备战建模——线性规划问题