可以在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)
Mar*_*nik 20
不,不能覆盖私有方法,因为它不能从任何其他类中看到.您已为子类声明了一个与超类方法无关的新方法.查看它的一种方法是问自己super.func()在Derived类中编写是否合法.没有办法禁止重写方法访问它覆盖的方法,但这恰恰就是这种情况.
不它不是。您可以标记覆盖只是为了确保这样:
@Override
public void func(){
System.out.println("In Derived Class func method");
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这将是一个编译器错误。