多态复习笔记-2

缺陷:覆盖私有方法

package java_test1;
/*
 * 2019/7/23
 * 覆盖问题
 * */
public class PrivateOverride {
	private void f() {
		System.out.println("private f()");
	}
	public static void main(String[] args) {
		PrivateOverride po=new Derived();
		po.f();
	}
}

class Derived extends PrivateOverride{
	public void f() {
		System.out.println("public f()");
	}
}
//output:private f()

我们期望输出的是public f() ,但是由于private 的方法被认为是final方法,而且对于导出类是屏蔽的,这种情况下Derived的f()方法就被认为是一个全新的方法。

  • 结论:只有非private方法才可以被覆盖,所以我们在多态的使用时候要将基类的方法设置成非private。