我们无法覆盖私有方法,那么为什么以下代码不会出错。相反,它会产生输出。
class A {
private void fun() {
System.out.println("ths is a private method");
}
}
class B extends A {
void fun() {
System.out.println("ths is wrng");
}
}
class C {
public static void main(String args[]) {
B ob = new B();
ob.fun();
}
}
答案 0 :(得分:1)
private
方法不会被继承。在main
方法中,您在fun()
类型的变量上调用B
方法。假设您的班级fun()
和班级B
位于同一个套餐中,似乎可以访问B
类型的C
方法。
你做过这个
A ob = new B();
ob.fun();
然后你就会得到编译错误。
B#fun()
与A#fun()
完全无关。
答案 1 :(得分:0)
fun()
类中未覆盖方法B
,因为它从未从类A
继承。
您在代码中调用的内容是B
类的方法,与类A
和方法A#fun()
无关。
要检查此项,请添加@Override
注释,您将收到编译时错误。
// Compilation error.
Class B extends A{
@Override
void fun(){
System.out.println("ths is wrng");
}
}
现在这段代码无法编译。
答案 2 :(得分:0)
两者都是完全不同的方法,彼此无关。由于私有方法不是继承的,因此这里没有覆盖的概念。
答案 3 :(得分:0)
首先,私有方法不会在子类中继承。如果您仍然尝试编写与父类同名的方法,则java编译器会将子类中的方法视为一个全新的方法,并且不会抛出任何异常。它就像子类中的新方法一样,隐藏了父类中的私有方法。