Java继承:降低构造函数与继承方法的可见性

bra*_*orm 4 java methods inheritance constructor access-modifiers

在下面的代码中,构造函数的Child可见性降低publicprivate,这是允许的.继承的方法(例如)test()不能降低可见性.为什么Java以这种方式运行?

class Parent { 
        public Parent(){}

       public void test()  
        {  
            System.out.print("parent test executed!");  
        }
}

class Child extends Parent{  

    private Child(){}

    private void test(){
        System.out.print("child test executed!"); 
    }

    }  
Run Code Online (Sandbox Code Playgroud)

rge*_*man 13

构造函数不是继承的,因此Child()不会覆盖Parent().

至于方法,如果您有(如果Child()public)

Parent p = new Child();
p.test();
Run Code Online (Sandbox Code Playgroud)

如果它被允许,这将调用一个private方法.因此,不允许在覆盖时缩小访问范围.

  • 嗯,这是另一个问题.每个构造函数都调用一个超类构造函数(```本身除外),无论是否有显式调用.如果没有显式调用,则Java将对no-arg超类构造函数的隐式调用作为子类构造函数中的第一个语句插入.如果超类构造函数是`private`,那么当然它是不可访问的. (3认同)