java类中子类重写父类中的方法,父类对象用子类对象实例化以后,父类的引用如何调用父类中的被重写方法。

多态的体现。

代码如下;

package TestMENG;

public class Base {
	int i = 99;

	public void amethod() {
		System.out.println("	Base.amethod() ");
	}

	Base() {
		amethod();
	}

}

package TestMENG;

public class Derived extends Base {
	int i = -1;

	public static void main(String argv[]) {
		Base b = new Derived();
		System.out.print(b.i);
		b.amethod();
	}

	public void amethod() {
		System.out.print("	Derived.amethod() ");
	}
}

控制台打印输出:     Derived.amethod() 99    Derived.amethod() 

上面代码经过debug调试  效果如下

当执行到Base()方法中的 amethod()方法时  将会跳转到子类Derived.amethod()方法中。

 涉及到的知识点:

1.父类的属性 不能被子类覆盖。

2.在实例化子类对象时,如果父类的实例引用了子类的对象(多态),例如:父类 实例 = new 子类()

   那么该引用在调用父类的方法时遵循以下原则

      2.1  该实例 可以调用父类中特有的方法。(该方法未被子类重写)

      2.2  该实例如果调用父类中的方法,若该方法被子类重写,则一定调用的是在子类中重写后的该方法。

      2.3   该实例不可以调用父类中没有的方法。(该方法子类特有)

猜你喜欢

转载自blog.csdn.net/Hurricane_m/article/details/89395368