java - toString() 定义在抽象类的私有(private)成员上,那么为什么打印子类对象会与抽象类的私有(private)成员一起打印呢?

标签 java abstract-class subclass

抽象类:

public abstract class absclass {

private int x,y;
public absclass(int x,int y) {
    // TODO Auto-generated constructor stub
    this.x=x;
    this.y=y;

}

@Override
public String toString() {
    // TODO Auto-generated method stub
    return new String(x+" --------- "+y);
}

子类:

public class pc extends absclass {

    public pc(int x,int y) {
        // TODO Auto-generated constructor stub
        super(x, y);
//      x=x;
//      y=y;
    }

    public void compute()
    {
        System.out.println("well this is pc");
        System.out.println(this);
        //for y=1;
    }

主要:

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new pc(0, 2).compute();
}

为什么子类 pc 可以访问抽象类的私有(private)成员x,y?根据继承规则,父类中的任何私有(private)成员都不会继承到子类中,因此子类不应具有任何成员 x,y。然而输出是:

0 --------- 2

最佳答案

pc 无法访问 xy。它可以访问 toString(),因为这是一个公共(public)方法。 toString() 可以访问 xy,因为它是在 absclass 中定义的。

关于java - toString() 定义在抽象类的私有(private)成员上,那么为什么打印子类对象会与抽象类的私有(private)成员一起打印呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49315582/

相关文章:

java - 在 Selenium Java 中打开 href 链接

java - 初始化后 OpenGL 窗口卡住

java - 使用 Jackson 处理 json 反序列化中缺失的类

Python抽象调用基类中导入的库的正确方法

Python:抽象实例变量?

java - 如何在java中禁用SSLContext中的通用名称检查?

c# - 通过调用基类的方法打印出派生类的方法名

ios - 从 UIView 子类访问属性

objective-c - 在 NSButton 子类中绘制文本

python - 如何在 Python 2.7 中查找仅在子类中定义的方法?