请教一个构造函数的问题 谢谢

job920 2013-02-08 04:31:55
比如一个父类 class A{
private C c; //C是一个接口类型的
public A(C c){
this.c=c}
}
一个子类 class B extends A{
private C c;
public B(C c){
super(c);
this.c=c//这里是不是还有必要写this.c=c这句话 我感觉没必要写了 因为已经把c这个值已经传给父类的构造函数了 那为什么我看到好多人写代码还写这句话
}
}

...全文
300 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluemoby 2013-02-20
  • 打赏
  • 举报
回复
引用 17 楼 job920 的回复:
引用 16 楼 bluemoby 的回复:引用 15 楼 job920 的回复: 引用 14 楼 bluemoby 的回复:示例代码,你可以取消注释,对比一下看看。 Java code ? 1234567891011121314151617181920212223242526272829303132 public class A { ……
没看明白你的问题。如果在new一个B对象的时候,如果没有加this.c=c,B对象的成员变量c是没有赋值的(也就是this.c等于null),只有对应父类A中定义的c赋值了(也就是super.c等于"hello")
job920 2013-02-20
  • 打赏
  • 举报
回复
引用 16 楼 bluemoby 的回复:
引用 15 楼 job920 的回复: 引用 14 楼 bluemoby 的回复:示例代码,你可以取消注释,对比一下看看。 Java code ? 1234567891011121314151617181920212223242526272829303132 public class A { private String c; public A……
很感谢你这么详细的给我这个菜鸟解答 我的意思是说为什么我们我们实际运行中 new一个对象B 也就是说 B b =new B("hello")class B extends A { String c; public B(String c) { super(c); //this.c = c; } } 就是说我们实际运行肯定都是 new一个B对象 然后我们在写B类的时候加不加this.c=c效果都一样呢
bluemoby 2013-02-20
  • 打赏
  • 举报
回复
引用 19 楼 job920 的回复:
引用 18 楼 bluemoby 的回复:引用 17 楼 job920 的回复: 引用 16 楼 bluemoby 的回复:引用 15 楼 job920 的回复: 引用 14 楼 bluemoby 的回复:示例代码,你可以取消注释,对比一下看看。 Java code ? 123456789101112131415161718192021222……
为父类的成员变量赋值为c,是为父类中定义的方法使用的,如果你不使用父类中的方法操作c当然可以不赋值,如果用到了父类中的这些方法就必须给父类的成员变量赋值。
bluemoby 2013-02-15
  • 打赏
  • 举报
回复
引用 15 楼 job920 的回复:
引用 14 楼 bluemoby 的回复:示例代码,你可以取消注释,对比一下看看。 Java code ? 1234567891011121314151617181920212223242526272829303132 public class A { private String c; public A(String ……
你自己运行过了吗?我让你先拷贝下来运行一遍,然后取消注释再运行第二遍,也就是加上this.c=c运行第二遍,你没发现两次的运行结果不一样吗?你也可以注释掉super(C),然后加上this.c=c,运行第三遍,结果与前两遍都不一样。只有两个语句都存在的时候,父类和子类的方法才能正确使用到这个c变量。你要是还看不明白,我也就没有办法了。
job920 2013-02-15
  • 打赏
  • 举报
回复
引用 14 楼 bluemoby 的回复:
示例代码,你可以取消注释,对比一下看看。 Java code ? 1234567891011121314151617181920212223242526272829303132 public class A { private String c; public A(String c) { super(); this……
谢谢你打了这么多字 我看你10楼说super(C)和this.c=c;两个语句都不能省略, 可是你举的例子是子类的this.c=c是省略阿
bluemoby 2013-02-14
  • 打赏
  • 举报
回复
示例代码,你可以取消注释,对比一下看看。
public class A {
	private String c;

	public A(String c) {
		super();
		this.c = c;
	}

	public String getA_C() {
		return c;
	}

	public static void main(String args[]) {
		B t = new B("测试");
		System.out.println(t.getA_C());
		System.out.println(t.getB_C());
	}
}

class B extends A {
	private String c;

	public B(String c) {
		super(c);
		//this.c = c;
	}

	public String getB_C() {
		return this.c;
	}

}
job920 2013-02-14
  • 打赏
  • 举报
回复
引用 10 楼 bluemoby 的回复:
引用 9 楼 job920 的回复: 引用 8 楼 bluemoby 的回复:引用 楼主 job920 的回复: 比如一个父类 class A{ private C c; //C是一个接口类型的 public A(C c){ this.c=c} } 一个子类 class B extends A{ private C c; public B(C c){ super(c); ……
哥们 能举个例子吗 我今天测试了一下阿 写了super(c)后 this.c=c写不写都是能正确运行的阿
job920 2013-02-14
  • 打赏
  • 举报
回复
引用 2 楼 flagiris 的回复:
一个是B.c,一个是A.c 能完全一样么?
哥们 能举个例子吗 我今天测试了一下阿 写了super(c)后 this.c=c写不写都是正确的阿
bluemoby 2013-02-10
  • 打赏
  • 举报
回复
引用 9 楼 job920 的回复:
引用 8 楼 bluemoby 的回复:引用 楼主 job920 的回复: 比如一个父类 class A{ private C c; //C是一个接口类型的 public A(C c){ this.c=c} } 一个子类 class B extends A{ private C c; public B(C c){ super(c); this.c……
你这个例子在子类中重新定义变量c的原因应该是子类无法访问父类的private变量,所以在子类中重复定义了一个变量来保存一个可访问的C对象引用,以方便在子类中使用这个C对象;调用super(c)是保证父类中定义的方法能够使用C对象。所以super(C)和this.c=c;两个语句都不能省略,只有这样才能保证父类和子类的方法都能正确的访问c对象。
job920 2013-02-10
  • 打赏
  • 举报
回复
引用 8 楼 bluemoby 的回复:
引用 楼主 job920 的回复: 比如一个父类 class A{ private C c; //C是一个接口类型的 public A(C c){ this.c=c} } 一个子类 class B extends A{ private C c; public B(C c){ super(c); this.c=c//这里是不是还有必要写this.c=c这句话 我感觉没必……
请教一下 构造函数是初始化对象用的 super(c) 是给父类的成员变量赋值 那给父类的成员变量赋值有什么用呢 后面我们又this.c=c 这是给子类成员变量赋值 我们比如new一个子类对象 比如new B(c) 我们super(c)把父类的成员变量设置为c 然后又this.c=c又把子类的成员变量设置为c有什么用呢 谢谢
a12939026 2013-02-09
  • 打赏
  • 举报
回复
引用 4 楼 job920 的回复:
引用 2 楼 flagiris 的回复:一个是B.c,一个是A.c 能完全一样么?我问培训学校老师的 老师说可以不写啊
你能透露下啥学校的老师么。 这纯扯蛋啊。 super(c) 是吧c 传给父构造器 this.c = c 是吧a 传给构造器中的对象。 2个功能么。
bluemoby 2013-02-09
  • 打赏
  • 举报
回复
引用 楼主 job920 的回复:
比如一个父类 class A{ private C c; //C是一个接口类型的 public A(C c){ this.c=c} } 一个子类 class B extends A{ private C c; public B(C c){ super(c); this.c=c//这里是不是还有必要写this.c=c这句话 我感觉没必要写了 因……
private的成员变量在子类中是无法访问的,而你在子类中又重新定义了一个c变量,父类的c和子类的c是完全不同的两个变量,所以super(c)相当于给父类的变量赋值,子类中的this.c=c是给子类的变量赋值
a12939026 2013-02-09
  • 打赏
  • 举报
回复
引用 6 楼 job920 的回复:
引用 5 楼 a12939026 的回复:引用 4 楼 job920 的回复: 引用 2 楼 flagiris 的回复:一个是B.c,一个是A.c 能完全一样么?我问培训学校老师的 老师说可以不写啊 你能透露下啥学校的老师么。 这纯扯蛋啊。 super(c) 是吧c 传给父构造器 this.c = c 是吧a 传给构造器中的对象。 2个功能么。传给父类然后在传给子……
子类继承父类的。 不用再显示的传过来了。 你这个基础概念不太行麽
job920 2013-02-09
  • 打赏
  • 举报
回复
引用 5 楼 a12939026 的回复:
引用 4 楼 job920 的回复: 引用 2 楼 flagiris 的回复:一个是B.c,一个是A.c 能完全一样么?我问培训学校老师的 老师说可以不写啊 你能透露下啥学校的老师么。 这纯扯蛋啊。 super(c) 是吧c 传给父构造器 this.c = c 是吧a 传给构造器中的对象。 2个功能么。
传给父类然后在传给子类 这过程到底怎么样啊 请指教
job920 2013-02-08
  • 打赏
  • 举报
回复
引用 2 楼 flagiris 的回复:
一个是B.c,一个是A.c 能完全一样么?
我问培训学校老师的 老师说可以不写啊
job920 2013-02-08
  • 打赏
  • 举报
回复
引用 楼主 job920 的回复:
比如一个父类 class A{ private C c; //C是一个接口类型的 public A(C c){ this.c=c} } 一个子类 class B extends A{ private C c; public B(C c){ super(c); this.c=c//这里是不是还有必要写this.c=c这句话 我感觉没必要写了 因为已经把c这个值已经传给父……
我问培训学校老师的 老师说可以不写啊
菖蒲老先生 2013-02-08
  • 打赏
  • 举报
回复
一个是B.c,一个是A.c 能完全一样么?
失落夏天 2013-02-08
  • 打赏
  • 举报
回复
加上就是传给子类的对象c, 子类对象c和父类对象c不是一个概念。

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧