java - java中私有(private)方法的重写

标签 java inheritance

我试图理解java中的方法重写。 了解私有(private)方法不能被重写。

public class Superclass 
{
    private String name;

    Superclass(String name) {
        this.name=name;
    }

    private void printName(String name) {
        System.out.println("This is a Superclass output"+name);
    }
}

public class Subclass extends Superclass
{
    Subclass(String name) {
        super(name);
    }

    public void printName(String name) {
        System.out.println(name);
    }   
}   
public static void main (String[] args) {
    Superclass sb = new Subclass("Superclass");
    //System.out.println(sb.getClass().getName());
    sb.printName("this is super class variable");
}

我正在尝试执行这段代码 和输出:“这是一个父类(super class)输出,这是父类(super class)变量”

请帮我理解 object sb 实际上指的是哪个类。 当 printName 在父类(super class)中公开时,我看到的输出是:

“这是父类(super class)变量”

还请帮助我理解为什么 sb 根据修饰符 private 和 public 指向两个不同的类。

最佳答案

重写是运行时(动态)多态性。我们不能重写私有(private)方法。所以私有(private)方法使用静态绑定(bind)。静态绑定(bind)方法不与特定对象关联,而是在 Type(Java 中的类)上调用。

当我们将父类方法设为公共(public)时,就会发生动态绑定(bind)。在运行时,对象的类型决定了要执行哪个方法。

关于java - java中私有(private)方法的重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47069297/

相关文章:

java - 卡经销商java gui

java - 将以单词形式书写的数字转换为整数?

java - 计算地点与用户位置之间的距离Android Studio

javascript - Javascript 中的属性继承

c++ - 为什么在派生类数据之前初始化基类数据

java - 另一个线程的代码如何在主线程上运行?

JPanels 的 Java 内存泄漏问题

java - Java通用继承

python - 多重继承/虚函数

java - 在 Hibernate 中映射多级继承