一个子类从父类继承所有的方法和变量,但它不继承构造函数

kevin8848he 2003-08-25 12:07:24
怎么理解这句话,谢谢
...全文
219 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
whyxx 2003-08-25
  • 打赏
  • 举报
回复
通常继承就是说子类可以直接使用父类的public和protected方法,构造函数必须和类名同名,当然不能继承了,难道子类可以和父类一个名字吗
jyn01 2003-08-25
  • 打赏
  • 举报
回复
private可能是继承了,但受到限制,无法使用吧,即使覆盖也是产生一个新的函数?个人意见。
shine333 2003-08-25
  • 打赏
  • 举报
回复
一个子类从父类继承所有的方法和变量,但它不继承构造函数

我认为这句话是不正确的,private的就不能继承
star821116 2003-08-25
  • 打赏
  • 举报
回复
比如
class A{
public A(){
...;
}

public static void calculate(int m){
}
}
class B extends A{
public B(){
...;

//当然也可以如下调用A的Constructor
super();
}

public static void calculateWage(int m){
//可以直接调用
calculate(m) + 2;
}
}
wuqf 2003-08-25
  • 打赏
  • 举报
回复
同意 jyn01(jyn01)
jyn01 2003-08-25
  • 打赏
  • 举报
回复
子类有其自己的构造函数,如果在子类中调用父类的函数的话只是但做一般的类的构造函数调用的。比如在B是A的子类,B()是自己的构造函数,它可以使用A的构造函数A(),但A()不是B的构造函数,这是我的看法,如果有错,请大家指导。
fpwang 2003-08-25
  • 打赏
  • 举报
回复
好像也可以说构造函数并不是类的成员
kevin8848he 2003-08-25
  • 打赏
  • 举报
回复
偶明白了,谢谢大伙,发钱(假的),;).
breakhard 2003-08-25
  • 打赏
  • 举报
回复
类B继承类A,类B是类A的子类,是说类B在继承类A所有特性之外还有自己的新特性。比如:类A是汽车类,类B是卡车类,卡车类继承汽车类是汽车类的子类,卡车有汽车的所有特性,同时还具有自己的特性:能装载货物等。所以我觉得上面说的“一个子类从父类继承所有的方法和变量”这句话并不是在讨论继承的细节问题,而是说明了一下继承的概念问题。我想大家也没必要在能否继承private上深究。

构造函数的作用是什么?当给一个类创建对象时,构造函数不是给这个对象赋初值吗?如果子类继承了父类的构造函数,当子类创建一个对象时给该对象赋什么值呢?就像上面说的,当卡车类创建对象时赋汽车类的初值那还有什么意义呢?

以上完全是本人的观点,由于本人也是一位新人,说的不对还望各位大侠指正!!-:)
danceflash 2003-08-25
  • 打赏
  • 举报
回复
为什么实践不行,却说应该是呢? ^_^
本来在类中构造函数就是特殊的函数
用特殊的机制的调用,为什么要和普通的成员方法一致呢? ^_^
jyn01 2003-08-25
  • 打赏
  • 举报
回复
应该是,而实践不行,所以我觉得继承后父类的构造函数就成为了子类的普通函数之一。
vintager4 2003-08-25
  • 打赏
  • 举报
回复
应该是不能继承的。class b 继承自class a ,class b的一个对象cb不能使用cb.a()这样的函数调用。
danceflash 2003-08-25
  • 打赏
  • 举报
回复
那么请问
如果父类的构造函数可以继承
是否表示,我们可以在子类中想调用父类的成员方法一样去调用父类的构造函数呢?
jyn01 2003-08-25
  • 打赏
  • 举报
回复
我认为是可以继存的,只有private才不能继存。
但是,所谓构造函数,是相对类名来定义的,子类和父类的名字不一样的,所以父类的构造函数在子类就不能称其为子类的构造函数了。
agree!!!!!!!
shuki 2003-08-25
  • 打赏
  • 举报
回复
我认为是可以继存的,只有private才不能继存。
但是,所谓构造函数,是相对类名来定义的,子类和父类的名字不一样的,所以父类的构造函数在子类就不能称其为子类的构造函数了。

所以,
那句话是不对的。

danceflash 2003-08-25
  • 打赏
  • 举报
回复
同意 ^_^
dshawn 2003-08-25
  • 打赏
  • 举报
回复
to kevin8848he(ooo)
你举的例子是Test2调用了Test1的构造方法,而不是继承了父类的构造方法,我是这么理解的
danceflash 2003-08-25
  • 打赏
  • 举报
回复
to kevin8848he(ooo):
如果你对JAVA中类的加载和构造有兴趣的话
请先阅读 Thinking in JAVA 2nd 的前7章,讲的不错,翻译的也不错 ^_^
wangyanqiu 2003-08-25
  • 打赏
  • 举报
回复


up

不矛盾!
danceflash 2003-08-25
  • 打赏
  • 举报
回复
to:star821116(冰冻三尺非一日之寒)

class B extends A{
public B(){
...;

//当然也可以如下调用A的Constructor
super();
~~~~~~~~~~~~~
}
}

此种用法好像有所误导
父类构造函数的调用("super();")只能写在子类构造函数的第一句上,否则编译不会通过
加载更多回复(1)

62,614

社区成员

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

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