abstract class Shape{
Shape(){}

public abstract double getGirth(double m,double n);
public abstract double getArea(double m,double n);
}class Oblong extends Shape{
String name;
Oblong(String name){
this.name = name;
}
public double getGirth(double m,double n){
double c = 0;
c = 2*(m + n);
return c;
}
public double getArea(double m,double n){
double s = 0;
s = m * n;
return s;
}
}class Square extends Oblong{
 String name;
 Square(String name){
  super(name);
 
  }
 
 public double getGirth(double m,double n){
  double c = 0;
  c = 4 * m;
  return c;
  }
 public double getArea(double m,double n){
  double s = 0;
  s = m * m;
  return s;
  }
}

System.out.println(x.name + "   " + x.getGirth(4,0) + "    " + x.getArea(4,0));程序编译运行正常,但是为什么构造函数不能正确执行,name 运行 后是 null ?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【zyp627】截止到2008-07-26 23:40:57的历史汇总数据(不包括此帖):
    发帖的总数量:62                       发帖的总分数:830                      每贴平均分数:13                       
    回帖的总数量:32                       得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:62                       结贴的总分数:830                      
    无满意结贴数:3                        无满意结贴分:60                       
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:4.84  %               无满意结分率:7.23  %                  
    敬礼!
      

  2.   

    Square和Oblong中都定义了一个field 叫name
    在Square中自己定义的name把父类的name隐藏了.你通过super初始化了父类定义的name,但是Square定义的name没有初始化.但通过Square的对象访问到的是这个未初始化的name.这两个name,改掉其中一个.
      

  3.   

    明确:继承中方法可以覆盖,field或者叫属性同名的会隐藏,不存在覆盖和多态一说.
      

  4.   

    Oblong 和 Square 类都有属性name.
    你要是Square x = new Square("name");
    所以你的x.name为null;(因为会去找Square的name属性,而Square的name属性,你没有付值)你要是Oblong x= new Square("name");
    x.name就不是null了.(取Oblong 的name属性)