JAVA方法覆盖和内部类概念

时间:2016-10-19 10:58:45

标签: java inner-classes override

class A {    //1st code starts here 
    private void display() {
        System.out.println("A class");
    }
}

class B extends A {

    protected void display() {
        System.out.println("B class");
    }   
}

class Test {

    public static void main(String args[]) {
        A obj = new B();
        obj.display();
    }
}

输出:Test.java:22:错误:display()在A中有私人访问权限                                 obj.display();

class Outer{     //2nd Code starts here

    class Inner1{
        private void m2() {
            System.out.println("Inner1 class");
        }
    }

    class Inner2 extends Inner1{
        protected void m2() {
            System.out.println("Inner2 class");
        }
    }

    public static void main(String args[]) { 
        Outer o=new Outer();
        Outer.Inner1 i=o.new Inner2();
        i.m2();
    }
}

输出:Inner1类

为什么在第二个代码中输出Inner1类时在第一个代码中编译时间错误???

2 个答案:

答案 0 :(得分:3)

Outer类的代码可以访问Outer类中声明的任何成员或方法,而不管访问级别如何。但是,被调用的m2方法是基类Inner1的方法,因为您无法覆盖private方法。

另一方面,Test类的代码无法访问不同类的private方法,这就是代码无法通过编译的原因。

答案 1 :(得分:1)

因为私人成员只能在课堂上访问。 当B类扩展时,私人成员无法访问B. 对于Inner类,内部类是类的成员,并且可以访问封闭类的所有成员。