A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 涂金哲 中级黑马   /  2012-6-14 13:53  /  1582 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class BaseClass{  
public String name;  
public int num;  
BaseClass(String name,int num){  
this.name=name;
 this.num=num;
 System.out.println("BaseClass:"+"name "+name+"   num "+num);
 } }
class SubClass extends BaseClass{  public String name;
 public int num;
 private String color="Green";
 SubClass(String name,int num,String color){
  super(name,num);   
this.color=color;//注释掉不影响输出结果   
System.out.println("SubClass:"+"name "+name+"  num "+num+"  color  "+color);
 }  }
public class Demo{    public static void main(String[] args)
 {   SubClass sc=new SubClass("B",5,"red");  
 SubClass sc2=new SubClass("B2",6,"Yello");
  BaseClass bc=new BaseClass("C",2);
 } }
简单的介绍:定义上层类BaseClass 下层类SubClass继承了上层类,在SubClass中通过super调用了BaseClass的构造方法,但是如果未对SubClass类中的color特有属性设置(代码中注释处语句去掉),当创建SubClass对象时并传入值,输出的结果一样?不明白为什么……

5 个回复

倒序浏览
你要知道你的子类中的那个构造中有一个System.out输出语句。就是我加粗的那句。其实name,num,color等属性前都有this关键字。
所以你少了this.color=color。并不会应该输出。  但如果你把System.out  放在构造函数外结果就会受影响了。请注意哦!
class BaseClass{  
public String name;  
public int num;  
BaseClass(String name,int num){  
this.name=name;
this.num=num;
  System.out.println("BaseClass:"+"name "+name+"   num "+num);
  } }
class SubClass extends BaseClass{  public String name;
public int num;
private String color="Green";
SubClass(String name,int num,String color){
  super(name,num);   
this.color=color;//注释掉不影响输出结果   
System.out.println("SubClass:"+"name "+name+"  num "+num+"  color  "+color);
  }  }
public class Demo{    public static void main(String[] args)
{   SubClass sc=new SubClass("B",5,"red");  
SubClass sc2=new SubClass("B2",6,"Yello");
  BaseClass bc=new BaseClass("C",2);
} }
回复 使用道具 举报
请看这部分代码:
SubClass(String name,int num,String color){
   super(name,num);   
   this.color=color;//注释掉不影响输出结果   
  System.out.println("SubClass:"+"name "+name+"  num "+num+"  color  "+color);
}
当你去掉this.color=color;这一行时候,对你的打印语句是没有影响的,因为你打印语句输出的是你构造对象时传入的参数。
如果将打印语句改成如下:
System.out.println("SubClass:"+"name "+name+"  num "+num+"  color  "+this.color);
即将color改为this.color使其不在是传入的参数而是对象的属性,那么再删除this.color=color,结果就改变了。
思考下,是吧?
回复 使用道具 举报
看了半天。原来你把System.out 语句放在构造函数里面了...、
回复 使用道具 举报
System.out.println("SubClass:"+"name "+name+"  num "+num+"  color  "+color);这句话中的color 打印的就是你传入的color  所以结果不会影响
回复 使用道具 举报
姚玉鹏 发表于 2012-6-14 14:47
System.out.println("SubClass:"+"name "+name+"  num "+num+"  color  "+color);这句话中的color 打印的就 ...

对啊……疯了,我
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马