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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 文密 中级黑马   /  2012-4-8 16:31  /  2232 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Person
{
      public String name;
      public int age;
          public Person(String name,int age)
         {
                this.name=name;
                this.age=age;
          }
          public Person() //如果不写这个构造函数,看看对类Student有什么影响。
          {
          }
      public void getInfo()
      {
               System.out.println(name);   
              System.out.println(age);   
      }
}
class Student extends Person
{
      public void study()
      {
                  System.out.println("Studding");
      }
      
      public static void main(String[] args)
      {
              Person p=new Person();
              p.name="person";
              p.age=30;
              p.getInfo();
             
              Student s=new Student();
        s.name="student";
        s.age=16;
        s.getInfo();
        s.study();
      }
}

6 个回复

正序浏览
pray 高级黑马 2014-4-26 05:58:12
7#
 说的好啊!我在xx社区打滚这么多年,所谓阅人无数,就算没有见过猪走路,也总明白猪肉是啥味道的。一看到楼主的气势,我就觉得楼主同在社区里灌水的那些人有着本质的差别,那忧郁的语调,那熟悉的签名,还有字里行间高屋建瓴的辞藻。没用的,楼主,就算你怎么换马甲都是没有用的,你的亿万拥戴者早已经把你认出来了,你一定就是传说中的最强id。自从社区改版之后,我就已经心灰意冷,对社区也没抱什么希望了,传说已经幻灭,神话已经终结,留在社区还有什么意思。没想到,没想到,今天可以再睹楼主的风范,我激动得忍不住就在屏幕前流下了眼泪。是啊,只要在楼主的带领下,社区就有希望了。我的内心再一次沸腾了,我胸腔里的血再一次燃烧了。楼主的几句话虽然简单,却概括扼要,一语道出了我们苦想多年的而不可得答案的几个重大问题的根本。楼主就好比社区的明灯,楼主就好比社区的方向,楼主就好比社区的栋梁。有楼主在,社区的明天必将更好!  
回复 使用道具 举报
当省略//前的构造函数时;Student类在创建对象后,系统调用Person时会默认一
个构造函数的初始化student (){},创建的与之相对性的初始值,调用其中的初始值只会得到空结果的;
而你在Student类中创建的对象不是与你在类Person中定义的其余2个构造初始化的,是调用不到期对应值的:
你可以在建立对象时()内填上name,age
                Student p=new Student(zhang,1);
                Student s=new Student(li,2);
或者在Person类中构造函数()改成与对象相应的
public Person();
而//后的可以省略也可不省略都先调用前面的
回复 使用道具 举报
如果省略了那个父类为空的构造函数肯定会报错,因为如果一个类中没有显示的编写构造函数,编译时,系统会自动的加入为空的构造函数,而如果在类中显示的定义了构造函数,则一定要在类中编写为空的那个构造函数,不然会出错。
回复 使用道具 举报
如果没有这空的构造函数,系统会提示 new Person()没有定义这个构造函数,还有就是 Student中没有定义默认的构造函数。
如果父类没有定义构造函数系统会提供默认的空的构造函数 ,子类的构造函数中子类也会默认的调用父类的空构造函数super(),而父类的定义了构造函数,父类就不会提供默认的构造函数,因此子类要想调用父类的构造函数可以使用super(父类的构造函数参数);
回复 使用道具 举报
没有这个构造函数肯定会报错的。
因为你student 类继承了 person 类。
学生类中没有写明构造方法,系统会给你提供空参数的构造方法------>
student (){
    super();
}
他会自动调用父类的空参数的构造方法。父类因为你重新定义了两个参数的构造方法,所以系统将不会再提供空参数的构造方法。这样,super() 将找不到。
如果父类中实在不需要空参数的构造方法的话,那么,
student(){
    super("person",30);//你必须显式调用父类的构造方法。

}
回复 使用道具 举报
编译不通过  子类 构造函数必须先调用父类构造函数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马