黑马程序员技术交流社区

标题: 一个继承的问题 [打印本页]

作者: 向阳泪无痕    时间: 2013-10-14 21:26
标题: 一个继承的问题
本帖最后由 向阳泪无痕 于 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并没有创建对象 ,又怎么会输出那句话。这个父类又是什么时候被调用的。
作者: 王飚    时间: 2013-10-14 21:35
  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. }
复制代码

作者: 向阳泪无痕    时间: 2013-10-15 09:38
本帖最后由 向阳泪无痕 于 2013-10-15 09:44 编辑
王飚 发表于 2013-10-14 21:35

这个我知道啊   我问的是  父类对象会不会在内存中产生  既然执行了父类的构造函数  说明有这个对象的产生 , 。。。。请看清我问的问题 ,你说的这个问题我是懂的。
作者: 王飚    时间: 2013-10-15 12:23
向阳泪无痕 发表于 2013-10-15 09:38
这个我知道啊   我问的是  父类对象会不会在内存中产生  既然执行了父类的构造函数  说明有这个对象的产生 ...

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


作者: 随心而动    时间: 2013-10-17 19:12
因为person类创建的是构造函数无需建立对象,当Student对象一创建就会调用父类中的输出语句。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2