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");
}
}
这个会打印什么,不要运行,顺便解释一下原因。谢谢。

解决方案 »

  1.   

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

  2.   

    如果构造器内部第一行没有明确的申明this(..)或者super(...)那么将会默认调用父类的无参构造函数
      

  3.   

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

  4.   

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

  5.   


    API是没有SubClass啊,这个是他自己建立的。不过一般SubClass是当做子类的名字。
      

  6.   

    其实是从名字上来看SubClass更像是子类,但是从程序中来看又是个父类....所以有此一说
      

  7.   

    子类的构造函数里一定会调用父类的构造函数的。只是调用分隐士调用和显示调用,显示调用就是显示的用super(参数)的方式调用父类构造函数,这个调用必须放到构造函数的第一行,隐士调用就是在我们不显示调用父类构造函数的时候会默认的调用super()这个无参的构造函数的。
    如果你把父类把无参构造函数设置为private的,你的子类中的构造函数如果不显示的调用父类的其他构造函数是回报错的
      

  8.   


    呃。SubClass一般代表子类的含义,但你这个例子里面却其实是个基类(父类),所以有点别扭
      

  9.   

    这个问题一直没发现,我关于父类子类的英文文档阅读很少。而且单词有点相近,没太在意,谢谢提醒。能说下sub是那个单词的缩写吗?
      

  10.   

    似乎并非缩写,sub本身就是个单词,另外也是个前缀词根。做形容词的时候是: adj. 附属的, 辅助的, 补充的subclass 早期的本意应该是:亚纲(生物学), 子集(数学);后来被计算机科学引入使用。
      

  11.   

    这个解释我理解,我的意思是怎么才算一个对象构造出来了?是不是指调用一个类的构造方法。如果只是调用父类的构造方法,父类就构造出来了?就是给父类对象分配一块内存空间。而不用new一块空间出来?方法属性都在里面。感觉构造函数隐藏了很多东西。我理解的错误点是第二个程序会打印出两句。如果前面的能解释通的,这个问题就解决了。
      

  12.   

    子类构造的时候会先创建父类的实例。如果没有父类对象与当前的子类关联,JVM如何知道你这个子类对象里面应该有什么方法和什么参数呢?
      

  13.   

    我也觉得SubClass这名字 像子类的 呵呵 答案