多态的练习

本文通过具体的Java代码示例,介绍了多态性的概念及其实现方式。详细展示了不同类之间的方法调用过程,以及如何根据对象的实际类型来选择合适的方法实现。

孟佳萱

测试代码

public class test {
	public static void main(String[] args) {
		A a1 = new A();
		A a2 = new B();
		B b = new B();
		C c = new C();
		D d = new D();
  
                          
                  //a1调用 A 里面的show方法
		System.out.println(a1.show(b));
                  //B是D的父类,父亲不能放到孩子里 -- (A obj) "A and A"
		System.out.println(a1.show(c));
                  //C和D 是兄弟关系 不能放到D里,放不下 --(A obj) "A and A"
		System.out.println(a1.show(d))
                      // D类型可以放到D里边 --(D obj) "A and D"
                 
				 //a2 可以使用A 里面的show方法,也可以使用子类重写的父类的方法
                 //  public String show(D obj) {
				  //     return "A and D";
			     // }public String show(A obj) {
				   //     return "B and A";
		         //   }    
		System.out.println(a2.show(b));
		//B是A的子类 所以使用show(A obj)----输出"B and A"
		System.out.println(a2.show(c));
		//C和D都是B 的子类 所以代表c和d是兄弟关系 使用show(A obj) ---输出"B and A"
		System.out.println(a2.show(d));
		//D直接使用show(D obj) ----输出"A and D"
			
		//b可以使用自己的方法 还可以使用继承过来父亲的方法 
		 //  public String show(D obj) {
		 //     return "A and D";
	     // }public String show(A obj) {
		   //     return "B and A";
        //   }        
        //public String show(Object obj){ return "B and B"; }
		System.out.println(b.show(b));
		//B是A的子类  使用show(A obj)  输出结果是A and D
		System.out.println(b.show(c));
		//C和D都是B 的子类 所以代表c和d是兄弟关系 使用show(A obj) ---输出"B and A"
		System.out.println(b.show(d));
		//D直接使用show(D obj) ----输出"A and D"

	}
}

分析

     a1调用 A 里面的show方法
	① System.out.println(a1.show(b));
      B是D的父类,父亲不能放到孩子里 -- (A obj) "A and A"
	②System.out.println(a1.show(c));
     C和D 是兄弟关系 不能放到D里,放不下 --(A obj) "A and A"
	③System.out.println(a1.show(d))
    D类型可以放到D里边 --(D obj) "A and D"
             
	a2 可以使用A 里面的show方法,也可以使用子类重写的父类的方法
      public String show(D obj) {
		    return "A and D";
		}
		public String show(A obj) {
		     return "B and A";
	     }    
	④ System.out.println(a2.show(b));
	B是A的子类 所以使用show(A obj)----输出"B and A"
	⑤System.out.println(a2.show(c));
	C和D都是B 的子类 所以代表c和d是兄弟关系 使用show(A obj) ---输出"B and A"
	⑥System.out.println(a2.show(d));
    D直接使用show(D obj) ----输出"A and D"
		
	b可以使用自己的方法 还可以使用继承过来父亲的方法 
	   public String show(D obj) {
		    return "A and D";
		}
		public String show(A obj) {
		     return "B and A";
	     }    
    public String show(Object obj){ return "B and B"; }
	⑦System.out.println(b.show(b));
	B是A的子类  使用show(A obj)  输出结果是A and D
	⑧System.out.println(b.show(c));
	C和D都是B 的子类 所以代表c和d是兄弟关系 使用show(A obj) ---输出"B and A"
	⑨System.out.println(b.show(d));
	D直接使用show(D obj) ----输出"A and D"

结果

孟佳萱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小冻梨♬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值