java多态简单测试

写一些代码来实现下多态,帮助理解

//造血干细胞
public class HSCs {

    public String name = "HSCs";

    public String color = "none";

    public boolean hasNucleus = true;

    public void copyOfSelf(){
        System.out.println("I can replicate myself");   //自我复制
    }

    public void work() {
        System.out.println("differentiate into others");    //分化为其他细胞
    }
}

//红细胞
class RBCs extends HSCs {

    public String name = "RBCs";

    public String color = "red";

    public boolean hasFe = true;

    public boolean hasNucleus = false;

    public void CaptureOxygen() {
        System.out.println("Capture Oxygen"); // 捕获氧气
    }

    public void work() {
        System.out.println("Carry oxygen"); // 携带氧气
    }

    public void work(int amount) {
        System.out.println("Carry " + amount + " molecules of oxygen"); // 携带一定数量的氧气
    }

}

//白细胞
class Leukocyte extends HSCs {

    public String color = "white";

    public boolean hasNucleus = true;

    public void work(String asd) {
        System.out.println("I can eat rubbish" + asd);
    }

    public void work() {
        System.out.println("I can eat rubbish");
    }
}



public class Test01 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        //父类引用指向子类对象
        HSCs hscs = new RBCs();

        // 查看父类和子类共有的成员变量
        System.out.println(hscs.hasNucleus); // 输出结果为:true,是父类中的属性
        System.out.println(hscs.color); // 输出结果为:none,是父类中的属性

        // 查看子类特有的成员变量
        // System.out.println(hscs.hasFe); //无法通过编译

        // 调用被重写的方法
        hscs.work(); // 输出结果为:“Carry oxygen”,是子类中的方法

        // 调用子类中与父类同名但参数不同的方法(此方法应该被视为子类特有的方法)
        // hscs.work(12); //无法通过编译

        // 调用父类特有的方法
        hscs.copyOfSelf(); // 输出结果为:“I can replicate myself”,是父类中的方法

        // 调用子类特有的方法
        // hscs.CaptureOxygen(); //无法通过编译

    }

}
//测试下转换为子类后的对象
public class Test02 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // 转换类型之后
        HSCs hscs = new RBCs();
        RBCs rbCs = (RBCs) hscs; // 转换为红细胞

        //Leukocyte leukocyte = (Leukocyte)hscs;    父类已经转换为子类,不可再次被转换

        // 查看父类和子类共有的属性
        System.out.println(rbCs.hasNucleus); // 输出结果为:false,是子类中的属性
        System.out.println(rbCs.color); // 输出结果为:red,是子类中的属性

        // 查看子类特有的属性
        System.out.println(rbCs.hasFe); // 输出结果为:true,是子类中的属性

        // 调用被重写的方法
        rbCs.work(); // 输出结果为:“Carry oxygen”,是子类中的方法

        // 调用子类中与父类同名但参数不同的方法(此方法应该被视为子类特有的方法)
        rbCs.work(4); // 输出结果为:“Carry 4 molecules of oxygen”,是子类中的方法

        // 调用父类特有的方法
        rbCs.copyOfSelf(); // 输出结果为:“I can replicate myself”,是父类中的方法

        // 调用子类特有的方法
        rbCs.CaptureOxygen(); // 输出结果为:“Capture Oxygen”,是父类中的方法

    }

}

简单总结
父类引用指向子类对象,可以使用父类中的属性以及方法,若方法被子类重写则会调用子类的方法,子类的其他方法则不可被使用;
强转后属性均变为子类中的,也可以调用子类中的其他方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值