public class Test2 {
    public static void main(String[] args) {
        ch c=new ch();
        c.m6();
        c.m7();
        c.m8();    
    }
   static class fa{
        final void m6(){
            System.out.println("father's m6");
        }
        static void m7(){
            System.out.println("father's m7");
        }
        void m8(){
            System.out.println("father's m8");
        }
    }
    static class ch extends fa{  }  
}
运行结果:
father's m6
father's m7
child's m8通过反编译可以看到编译期间就绑定了父类的方法,个人认为,这仅仅是java中的c.m6(),c.m7(),c.m8()反编译后呈现的效果,并不是由于child中存在m6,m7,m8。子类中并不存在从父类中继承来的方法和变量,继承仅仅使父类的方法和变量对子类可见,从而使子类可以直接调用没有在子类中定义过的方法和变量。

解决方案 »

  1.   

    child's m8从何而来?子类中当然包含父类的变量,但方法只有一份。
      

  2.   

    关于变量,函数的可见性,有一个简单的表格
    Modifier        Class  Package  Subclass  World
    public               Y          Y           Y                   Y
    protected          Y          Y           Y                   N
    no modifier        Y          Y           N                   N
    private               Y          N           N                   N
    官方教程 http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html