话不多说,代码如下
class A{ int i =2; void m1(){ System.out.println("'A's m1"); } void m2(){ System.out.println("'A's m2"); } void m3(){ System.out.println("'A's m3"); } } class B extends A{ void m2(){ System.out.println("'B's m2"); } } class C extends B { void m3() { System.out.println("'C's m3" +","+(i+1)); } } public class Polym{ public static void main(String[] args) { A a= new C(); a.m1(); a.m2(); a.m3(); } }分析了一下代码,做出了思维导图,如下: 简单来说:C继承了B,B继承了A,根据它们的方法属性继承关系可以得出实际C类得到的是A类的成员变量和未重写的方法m1和已重写的方法m2,m3。 编译得到的结果如下: A a= new C();这里使用了JAVA多态性的特点,子类对象实例化之前会自动实例化父类对象,故子类对象的实例化通过父类接受实现就是对象的自动向上转型。但要注意的一点是此时依然是子类的实例。