超类中的私有方法是否可以在子类中被覆盖?

2022-09-01 13:38:27

私有方法可以在 Java 中被覆盖吗?如果不是,那么下面的代码是如何工作的?

class Base{
      private void func(){
            System.out.println("In Base Class func method !!");         
      };
}

class Derived extends Base{
      public void func(){   //  Is this a Method Overriding..????        
            System.out.println("In Derived Class func method"); 
      }      
}

class InheritDemo{
      public static void main(String [] args){                      
            Derived d = new Derived();
            d.func(); 
      }
}

答案 1

不,您没有覆盖它。您可以通过尝试用 标记它或尝试调用 来进行检查。两者都行不通;它们会引发编译器错误。@Overridesuper.func();

此外,请查看以下内容:

class Base {
      private void func(){
            System.out.println("In base func method");         
      };
      public void func2() {
          System.out.println("func2");
          func();
      }
}

class Derived extends Base {
      public void func(){   //  Is this an overriding method?
            System.out.println("In Derived Class func method"); 
      }
}

class InheritDemo {
      public static void main(String [] args) {
            Derived D = new Derived();
            D.func2(); 
      }
}

它将打印:

func2
In base func method

当您更改为 public ,它将是一个覆盖,输出将更改为:func()Base

func2
In Derived Class func method

答案 2

否,不能重写私有方法,因为子类不会继承其父级的私有成员。您已为子类声明了与超类方法无关的新方法。看待它的一种方法是问问自己,在派生类中编写是否合法。重写方法不可能被禁止访问它所覆盖的方法,但这里的情况恰恰如此。super.func()


推荐