“覆盖”只在某方法是基类的接口的一部分时才会出现。即,必须能将一个对象向上转型为它额基本类型并调用相同的方法。如此,该方法在基类中不能为private,否则它就不是基类接口的一部分。它只是一些隐藏在类中的程序代码,只不过具有相同名称。若子类中以相同名称生成一个public,protected或报访问权限的方法的话,此时你并没有覆盖该犯法,仅是生成了一个新的方法。
“private”是如此强大,只能把它考虑成是因为它所属类的组织结构的原因而存在,其他类完全看不到它。
package com.selfCode; /** * @author delia * @create 2016-06-15 下午9:31 * 向上转型时,调用谁的方法? */ class A{ public A() { System.out.println("Class A constructor"); print(); System.out.println("==================="); } private void test(){ System.out.println("Class A test()"); } public void print(){ System.out.println("Class A print()"); } } class B extends A{ public B() { System.out.println("Class B constructor"); print(); System.out.println("-------------------"); } public void test(){ System.out.println("Class B test()"); } public void print(){ System.out.println("Class B print()"); } } class C extends A{ public C() { System.out.println("Class C constructor"); } } public class TestOverRide { public static void main(String[] args) { A a = new B(); //a.print();//输出Class B print() //a.test();//错误 B b = new B(); //b.print();//输出Class B print() //b.test(); C c = new C(); c.print();//输出Class A print() } /*执行结果 * Class A constructor Class B print() =================== Class B constructor Class B print() ------------------- Class A constructor Class B print() =================== Class B constructor Class B print() ------------------- Class A constructor Class A print() =================== Class C constructor Class A print() * */ }