巩固java(五)----通过实例理解java多态

package duotai;
class A{
	public String show(){
		return "A";
	}
}

class B extends A{
	
	public String show(){
		return "B";
	}
	public String onlyB(){
		return "onlyB";
	}
	
}

class C extends B{
	public String show(){
		return "C";
	}
	
	public String onlyC(){
		return "onlyC";
	}
}

class D{

	public String show(String item){
		return "D+"+item;
	}
	
	public int show(int item){
		return item;
	}
}


public class Main {
       
	public static void main(String[] args) {
		A a = new A();
		B b = new B();
		C c = new C();
		A ab = new B();  
		A ac = new C();
		B bc =new C();
		/*
		 * B是A的子类,C是B的子类,A中有方法show(),B和C都对其进行了重写。
		 * 重写是父类与子类多态性的表现,子类的对象调用该方法将调用子类中的定义的此方法,父类中的此方法被屏蔽。
		 * 1,2,3分别为A,B,C的对象调用该方法,所以返回结果分别为A,B,C
		 * 
		 */
		//1
		System.out.println("1:a.show()="+a.show());      //输出:1:a.show()=A
		//2
		System.out.println("2:b.show()="+b.show());      //输出:2:a.show()=B
		//3
		System.out.println("3:c.show()="+c.show());      //输出:3:a.show()=C
		/*
		 * 当超类通过声明的引用变量(称其为“对象的引用”其实更合适)调用其子类的对象时,它调用的方法必须是超类中拥有的子类的方法。
		 *    4中变量ab是由A声明的,引用了B的对象,所以ab.show()调用的是B类中的show()方法;但是如果使用ab变量调用onlyB()
		 * 是调不到的,因为超类中没有该方法。
		 * 5,6同4
		 * 
		 */
		//4
        System.out.println("4:ab.show()="+ab.show());    //输出:4:ab.show()=B
        //5
        System.out.println("5:ac.show()="+ac.show());    //输出:5:ac.show()=C
        //6
        System.out.println("6:bc.show()="+bc.show());    //输出:6:bc.show()=C
        
        /*
         * 在D中有两个show方法,但它们的参数和返回值不同,这是方法的重载。
         * 重载是一个类中多态性的一种表现,方法名相同,但参数的个数、类型,返回值至少有一个不同。
         * 
         */
        D d =new D();
        //7
        System.out.println("7:d.show(itemStr)="+d.show("dd"));   //7:d.show(itemStr)=D+dd
        //8
        System.out.println("8:d.show(itemInt)="+d.show(1));      //8:d.show(itemInt)=1
	}
       
       
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文地址:https://www.cnblogs.com/dingxiaoyue/p/4931760.html