您的位置:首页 > 编程语言 > Java开发

java多态简单测试

2018-01-31 17:44 225 查看
写一些代码来实现下多态,帮助理解

//造血干细胞
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”,是父类中的方法

}

}


简单总结

父类引用指向子类对象,可以使用父类中的属性以及方法,若方法被子类重写则会调用子类的方法,子类的其他方法则不可被使用;

强转后属性均变为子类中的,也可以调用子类中的其他方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jav