覆盖私有方法

时间:2014-04-14 06:13:38

标签: java private override

我们无法覆盖私有方法,那么为什么以下代码不会出错。相反,它会产生输出。

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();
    }
}

4 个答案:

答案 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编译器会将子类中的方法视为一个全新的方法,并且不会抛出任何异常。它就像子类中的新方法一样,隐藏了父类中的私有方法。