java多态的重新认识

前段时间感觉对java多态机制认识有些模糊,因此又重新查资料看了下,写了段代码加强认识,通过下面代码相信对java多态机制又有了更深的认识,贴代码:

public class A {
	public String showString(B b)
	{
		return "ab";
	}
	public String showString(A a)
	{
		return "aa";
	}
}

public class B extends A{
	public String showString(C c)
	{
		return "bc";
	}
	public String showString(A a)
	{
		return "ba";
	}
	public String getB()
	{
		return "父类调用未被声明的子类方法成功";
	}
}

public class C extends B{
	public String showString(B b)
	{
		return "cc";
	}
	public String showString(A a)
	{
		return "ca";
	}
}

启动类:

/*多态的重要内涵:父类对象引用子类类型时,引用方法的方法取决于子类类型(前提是此方法在父类中有声明,否则报错)*/
public class S {
	public static void main(String[] arg){
		A a1=new A();
		A a2=new B();
		B b=new B();
		C c=new C();
		System.out.println(a1.showString(a2)+" "	
							+a1.showString(b)+" "
							+a1.showString(c));
		System.out.println(a2.showString(a1)+" "	//调用被引用的子类B中的方法,该方法在A中有声明;
							+a2.showString(b)+" "	//调用父类A中的方法,因为子类b中无此方法;
							+a2.showString(c));		//调用父类A中的方法,因为虽然子类中有此方法,但在父类A中没有声明,故最终调用的是父类A中的方法(关键);
		//System.out.println(a2.getB());//该行报错(引用方法的方法取决于子类类型(前提是此方法在父类中有声明,否则报错))
	}
}

运行结果:
aa ab ab
ba ab ab
  以上即为多态的测试代码,其中第一行的运行结果很好理解,第二行的第一个输出即体现了“父类对象引用子类类型时,引用方法的方法取决于子类类型”这句话的内涵,第二行第三个输出即反映了当父类对象在引用子类方法时,其查找该方法的顺序,即先查找父类中是否有此方法,如果调用子类中的此方法,若无,则在父类中查找相近的方法(在本例中A中的showString(B b)与B中的showString(C c)相近)。,当然java中多态的运用是多样的,以后在实践中再多加学习吧,,,,


你可能感兴趣的:(java)