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

时间:2018-03-16 07:52:28

标签: 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 可以访问抽象类的私有成员 x,y ?根据继承规则,父类中的任何私有成员都不会继承到子类中,因此子类不应包含任何成员x,y。然而输出是:

  

0 --------- 2

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

没有。 toString()继承自父类。由于您没有在子类中重写此方法,并且因为它可以访问父类的私有变量,所以在调用println时,它只是打印父类toString()的输出。