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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 向阳泪无痕 高级黑马   /  2013-10-14 21:26  /  1858 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 向阳泪无痕 于 2013-10-16 22:52 编辑

class Person
{   Person() {  System.out.println("我会打印吗?") ;  }    }
class Student extends Person
{   Student() {}   }
class PS
{
  public  static void main(String args[])
  {
      Student   s  =  new Student();
  }
}

这里 Student 继承了Person  在Student 的对象创建时,Person 没有对象产生,我知道 子类创建时会先去访问父类 ,但Person并没有创建对象 ,又怎么会输出那句话。这个父类又是什么时候被调用的。

7 个回复

倒序浏览
  1. /*
  2. 子类的构造函数中都默认有一句super();
  3. 如果不写的话就会自动加上去,所以,
  4. 可以自定义另一个有参数的父类构造函数,
  5. 就不会访问到父类中的空参数构造函数了;

  6. */

  7. class Person
  8. {  
  9.         Person()
  10.         {
  11.                 System.out.println("我会打印吗?") ;
  12.         }
  13.         Person(int i)
  14.         {}
  15. }
  16. class Student extends Person
  17. {   
  18.         Student()
  19.         {
  20.                 //super()//这是自动访问父类中的空参数构造函数:Person(){}
  21.                 super(3);//如果这里不写,那么就会自动加上一句隐式的super();
  22.         }
  23. }
  24. class PS
  25. {
  26.   public  static void main(String args[])
  27.   {
  28.       Student   s  =  new Student();
  29.   }
  30. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
黄文伯 + 2 沙发多给一分!继续加油哈!

查看全部评分

回复 使用道具 举报
你在Student构造函数里加上这句话super();就会输出"我会打印吗?"这句话,super()表示调用父类无参构造函数。
回复 使用道具 举报
本帖最后由 向阳泪无痕 于 2013-10-15 09:44 编辑

这个我知道啊   我问的是  父类对象会不会在内存中产生  既然执行了父类的构造函数  说明有这个对象的产生 , 。。。。请看清我问的问题 ,你说的这个问题我是懂的。
回复 使用道具 举报
向阳泪无痕 发表于 2013-10-15 09:38
这个我知道啊   我问的是  父类对象会不会在内存中产生  既然执行了父类的构造函数  说明有这个对象的产生 ...

构造函数也是函数的一种,具有函数的特性:可以重载,调用等,所以,要明确的是,方法(函数)只有对象才可以调用,super()是指的是父类的对象,而构造函数是给对象进行初始化的,所以在继承中,可以理解为子类的super()是new 父类(),也就是在子类中创建了父类对象(我是这样理解的);这样,才能在子类中直接调用父类方法;
回复 使用道具 举报
子父类中成员的特点
  |-- 成员变量
    子类有,就运行子类,子类没用运行父类
  |-- 成员函数
    子类父类出现了一摸一样的函数,称为子类覆盖父类函数
  |-- super关键字
     父类存储空间,super调用父类方法,父类成员变量
     super调用父类构造方法
  |-- 构造函数
     构造函数没有覆盖,子类的构造函数默认访问父类中空参数的构造函数

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1

查看全部评分

回复 使用道具 举报
oath 中级黑马 2013-10-15 21:17:06
7#
person是没有创建对象,但是字节码被加载了,然后Student在实例化时又调用了Person字节码中的无参构造函数
回复 使用道具 举报
因为person类创建的是构造函数无需建立对象,当Student对象一创建就会调用父类中的输出语句。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马