JAVA中子类引用父类成员变量

package Chapter4;

abstract class Shape{
abstract void GetArea();
abstract void GetPerim();
}

class Rectangle extends Shape{
private double chang;
private double kuan;
Rectangle(double a,double b){
chang=a;
kuan=b;
}
void GetArea(){
System.out.println("该矩形的面积是: "+(chang*kuan));
}
void GetPerim(){
System.out.println("该矩形的周长是: "+2*(chang+kuan));
}
}

class Circle extends Shape{
private double R;
final static double PI=3.14;
Circle(double a){
R=a;
}
void GetArea(){
System.out.println("该Circle的面积是: "+(R*R*PI));
}
void GetPerim(){
System.out.println("该Circle的周长是: "+2*R*PI);
}
}

class Square extends Rectangle{
Square(double a){
super(a,a); // 疑问处!
}
}

public class example3 {
public static void main(String args[]){
Shape s=new Circle(2.0);
s.GetArea();
Shape s1=new Rectangle(2,3);
s1.GetArea();
Rectangle s2=new Square(2);
s2.GetArea();
}
}

对应疑问处 将super(a,a)改成
super.chang=a;
super.kuan=a;
为什么会运行不正确呢??

因为 private double chang; private double kuan; 私有变量只能在类内部访问,子类是不能访问的所以
super.chang=a;super.kuan=a;不行,而且Rectangle没有无参构造方法,所以必须用super(a,a)来实例化。
如果想super.chang=a;super.kuan=a;的还 先把private 改成protected 这样子类才能访问的到。另外再给Rectangle加无参构造方法,这样才能不通过super(a,a)来实例化父类
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-07-03
Rectangle 中的属性

chang和kuan是private的,在非Rectangle 类内部是不能直接访问的