public final或protected final方法不会在基类中重写,当我们在父类中创建一个方法“PRIVATE FINAL”时,它会覆盖它

时间:2015-04-21 16:55:24

标签: java

public finalprotected final方法在基类中没有覆盖很简单,当我们在父类中创建方法private final时,即使你创建了一个父类{{1},它也会被覆盖并在方法private final覆盖的子类中扩展它。有人可以解释这种行为吗?

protected final

3 个答案:

答案 0 :(得分:0)

你好,因为其他人说你误解了压倒一切。首先,A类中的show方法是私有的。因此,私人成员无法从该类的外部访问。下面的示例将解释:

class A {
    private final void show() {
        System.out.println("Show method from A");
    }
}

public class B extends A {
    // protected final void show() {
    //     System.out.println("Show method from B");
    // }

    public static void main(String... s) {
        new B().show();
    }
}

如果你编译它会产生以下错误:

B.java:12: error: cannot find symbol
        new B().show();
             ^
symbol:   method show()
location: class B
1 error

在你的问题中,它正在调用方法“show()”,它在B类中定义而不是在A.i中希望这将澄清你的疑问。

答案 1 :(得分:0)

  

你可以声明一些或所有类的方法最终。你用的是   方法声明中的final关键字表示该方法   不能被子类覆盖。 Object类执行此操作-a   其方法的数量是最终的。

     

如果有一个实现,你可能希望将方法设为final   不应该改变,这对于一致的状态至关重要   对象。

来自java官方Documents的声明。

答案 2 :(得分:0)

如果您的代码是

A a = new B();
a.show();

然后您将尝试从父类调用无法覆盖的方法。在你的例子中,这是私有的,你不会让它工作。尝试将这些方法公之于众。

所发生的事情是,当对象的类型为B时,你的B.show()方法正在掩盖A.show() - 这总是事情的运作方式。当引用属于父类的类型时,覆盖方法有效。