构造方法。

sdojqy1122 2012-04-25 10:17:03
public class Test extends SubClass{
Test(){
System.out.println("hello,i'm Test");
}
public static void main(String[] args) {
new Test();
}
}
class SubClass{

SubClass(){
System.out.println("hello,i'm subClass");
}
}
如上,会打印什么。
接着
public class Test extends SubClass{

public static void main(String[] args) {
new Test();
}
}
class SubClass{

SubClass(){
System.out.println("hello,i'm subClass");
}
}
这个会打印什么,不要运行,顺便解释一下原因。谢谢。
...全文
284 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2012-04-25
  • 打赏
  • 举报
回复
似乎并非缩写,sub本身就是个单词,另外也是个前缀词根。

做形容词的时候是: adj. 附属的, 辅助的, 补充的

subclass 早期的本意应该是:亚纲(生物学), 子集(数学);后来被计算机科学引入使用。
sdojqy1122 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
引用 8 楼 的回复:
查了下API,没有叫SubClass的,即使有应该可以可以覆盖掉把,呵呵。
呃。。。。SubClass一般代表子类的含义,但你这个例子里面却其实是个基类(父类),所以有点别扭
[/Quote]
这个问题一直没发现,我关于父类子类的英文文档阅读很少。而且单词有点相近,没太在意,谢谢提醒。能说下sub是那个单词的缩写吗?
MiceRice 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
查了下API,没有叫SubClass的,即使有应该可以可以覆盖掉把,呵呵。
[/Quote]

呃。。。。SubClass一般代表子类的含义,但你这个例子里面却其实是个基类(父类),所以有点别扭
VanBaston 2012-04-25
  • 打赏
  • 举报
回复
子类的构造函数里一定会调用父类的构造函数的。只是调用分隐士调用和显示调用,显示调用就是显示的用super(参数)的方式调用父类构造函数,这个调用必须放到构造函数的第一行,隐士调用就是在我们不显示调用父类构造函数的时候会默认的调用super()这个无参的构造函数的。
如果你把父类把无参构造函数设置为private的,你的子类中的构造函数如果不显示的调用父类的其他构造函数是回报错的
安特矮油 2012-04-25
  • 打赏
  • 举报
回复
其实是从名字上来看SubClass更像是子类,但是从程序中来看又是个父类....所以有此一说
VanBaston 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 5 楼 的回复:

其它讨论咱就不介入了,但有个东西比较碍眼,建议把你当前例子里面的:
SubClass
这个类名,修改为:
BaseClass 或 ParentClass


这样看起来眼顺些,呵呵~~~

查了下API,没有叫SubClass的,即使有应该可以可以覆盖掉把,呵呵。
[/Quote]

API是没有SubClass啊,这个是他自己建立的。不过一般SubClass是当做子类的名字。
sdojqy1122 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

其它讨论咱就不介入了,但有个东西比较碍眼,建议把你当前例子里面的:
SubClass
这个类名,修改为:
BaseClass 或 ParentClass


这样看起来眼顺些,呵呵~~~
[/Quote]
查了下API,没有叫SubClass的,即使有应该可以可以覆盖掉把,呵呵。
sdojqy1122 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
构造子类的对象之前必须构造父类对象,所以说不管怎么样,子类都都会调用父类中的一个构造构造方法.如果子类构造方法没有显式调用父类中的构造方法或另一个子类构造方法,则自动调用无参的父类构造方法
[/Quote]
恩,想问下怎么才算一个对象构造出来了。是直接调用该类的构造方法吗。
sdojqy1122 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 的回复:]
调用父类的构造方法并不是说构造父类对象。同样,在继承抽象类情况下,创建子类对象时一样会调用抽象类的构造方法,但是抽象类无法构建一个实例。
[/Quote]
这位童鞋讲解的比较到位。我没什么可问的了。
WayneXuan 2012-04-25
  • 打赏
  • 举报
回复
构造子类的对象之前必须构造父类对象,所以说不管怎么样,子类都都会调用父类中的一个构造构造方法.如果子类构造方法没有显式调用父类中的构造方法或另一个子类构造方法,则自动调用无参的父类构造方法
MiceRice 2012-04-25
  • 打赏
  • 举报
回复
其它讨论咱就不介入了,但有个东西比较碍眼,建议把你当前例子里面的:
SubClass
这个类名,修改为:
BaseClass 或 ParentClass


这样看起来眼顺些,呵呵~~~
kevinwangxiyu 2012-04-25
  • 打赏
  • 举报
回复
调用父类的构造方法并不是说构造父类对象。同样,在继承抽象类情况下,创建子类对象时一样会调用抽象类的构造方法,但是抽象类无法构建一个实例。
sdojqy1122 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

如果构造器内部第一行没有明确的申明this(..)或者super(...)那么将会默认调用父类的无参构造函数
[/Quote]
我的理解是子类先构造父类,在构造自己。你的意思是子类只相当于只调用自己的构造方法。至于自己的构造方法有没有调用父类方法就不管了。
kevinwangxiyu 2012-04-25
  • 打赏
  • 举报
回复
子类可以调用父类的构造方法,但是不能够继承父类的构造方法。所以第二种调用了父类方法以后输出一次。
安特矮油 2012-04-25
  • 打赏
  • 举报
回复
如果构造器内部第一行没有明确的申明this(..)或者super(...)那么将会默认调用父类的无参构造函数
sdojqy1122 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

Test(){
System.out.println("hello,i'm Test");
}
相当于
Test(){
super();
System.out.println("hello,i'm Test");
}
这样就很明白了吧
[/Quote]
不是很明白。。
安特矮油 2012-04-25
  • 打赏
  • 举报
回复
Test(){
System.out.println("hello,i'm Test");
}
相当于
Test(){
super();
System.out.println("hello,i'm Test");
}
这样就很明白了吧
djx210103212 2012-04-25
  • 打赏
  • 举报
回复
我也觉得SubClass这名字 像子类的 呵呵

答案
[Quote=引用 1 楼 的回复:]

Test(){
System.out.println("hello,i'm Test");
}
相当于
Test(){
super();
System.out.println("hello,i'm Test");
}
这样就很明白了吧
[/Quote]

ynwenta 2012-04-25
  • 打赏
  • 举报
回复
我的分还没有拿
sdojqy1122 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
子类构造的时候会先创建父类的实例。如果没有父类对象与当前的子类关联,JVM如何知道你这个子类对象里面应该有什么方法和什么参数呢?
[/Quote]
先创建父类实例,要不要用到父类的构造方法?子类创建实例要不要用到构造方法?那么程序二应该打印出什么?
加载更多回复(3)

62,614

社区成员

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

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