可以在子类中重写超类中的私有方法吗?

Ank*_*jed 26 java inheritance

可以在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(); 
      }
}
Run Code Online (Sandbox Code Playgroud)

Pol*_*ome 47

不,你没有压倒它.您可以通过尝试标记@Override或通过尝试拨打来进行检查super.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
Run Code Online (Sandbox Code Playgroud)

当您更改func()Base公众,那么这将是一个覆盖,输出将变为:

func2
In Derived Class func method
Run Code Online (Sandbox Code Playgroud)

  • @Polygnome:对于演示它不是覆盖的示例以及`@Override` 测试,+1。 (2认同)
  • +1用于显示动态调度在这种情况下如何工作(或不工作:D). (2认同)

Mar*_*nik 20

不,不能覆盖私有方法,因为它不能从任何其他类中看到.您已为子类声明了一个与超类方法无关的新方法.查看它的一种方法是问自己super.func()在Derived类中编写是否合法.没有办法禁止重写方法访问它覆盖的方法,但这恰恰就是这种情况.


Doo*_*nob 3

不它不是。您可以标记覆盖只是为了确保这样:

@Override
public void func(){
     System.out.println("In Derived Class func method"); 
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,这将是一个编译器错误。