Java:超类中私有变量的初始化

问题描述:

在超类的构造函数之外初始化的私有变量是否应该在子类中正确继承?Java:超类中私有变量的初始化

例如,在下面的代码中,私有实例变量x是否会在子类中正确继承?我知道x和y只能在Rectangle中定义的2个公共getter才能在Square子类中访问。但是,如果x在构造函数之外初始化,子类是否仍能成功继承x?

public class Rectangle 
{ 
    private int x = 0; 
    private int y; 
    protected double height; 
    protected double length; 

    public Rectangle(double length, double height) 
    { 
     this.height = height; 
     this.length = length; 
     y = 0; 
    } 

    public int getx() 
    { 
     return x; 
    } 

    public int gety() 
    { 
     return y; 
    } 
} 


public class Square extends Rectangle 
{ 
    public Square(double side) 
    { 
     super(side, side); 
    } 
} 
+1

是的。没问题。 – Gendarme

+0

私人成员根本没有继承。然而,它们按照程序文本初始化。 – EJP

是的,它继承没有问题。如果在构造函数中没有赋值,那么最终会得到默认值,因为它是实例成员。

Object的默认值为null,并且每个基元都有其默认值。

+0

你的意思是说,因为我给构造函数外的私有变量x赋值,赋值不会被继承,但默认值会被继承吗?说如果我将'private int x = 0'这一行更改为'private int x = 1',我会得到x值作为子类中默认的0或1吗?谢谢。 –

+0

你会得到1 :)因为它是实例成员并被分配。 –