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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 炉海佳 高级黑马   /  2013-2-20 17:13  /  1246 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

视频看了好几遍虽然答案都记住了还是不太理解,只知道父类做完了的事情子类直接掉用就可以了,用super();包括括号里面加参数,希望举例说明

4 个回复

倒序浏览
super代表父类所属的空间  只能定义在构造函数的第一行,不能喝this同时出现 。如果父类没有空参的构造函数,子类的构造函数中必须手动调用super指定要访问的父类中的构造函数
回复 使用道具 举报
super() 是调用父类的无参数初始化方式,这句话是可以不写的,要写就得写第一行,要是像super(2) ,就是调用父类中有参数的初始化方式
  1. class Person{
  2.         int age;
  3.         Person(){
  4.                 age=30;
  5.         }
  6.         Person(int age){
  7.                 this.age=age;
  8.         }
  9. }
  10. class Student extends Person{
  11.         Student(){
  12.                 //super(35);看这个
  13.         }
  14.         public void method(){
  15.                 System.out.println(age);
  16.         }
  17. }

  18. class SuperTest {
  19.         public static void main(String[] args) {
  20.                 Student p=new Student();
  21.                 p.method();
  22.         }

  23. }
复制代码
结果是30,要是把//super(35);取消注释,结果就是35

至于调用父类的参数或者方法得用super.
回复 使用道具 举报
super是用来调用父类里面的构造函数的。如果一个子类可能有多个构造函数,他们直接的调用使用this,而子类去调用父类的构造函数用super()
回复 使用道具 举报
本帖最后由 汪平乐 于 2013-2-20 22:52 编辑

我写了下面的代码,希望对你有帮助,然后参照毕老师讲课的ppt加深理解 《Java基础[04-继承上]》{:soso_e133:}
  1. class Animal
  2. {
  3.         private String name;
  4.         Animal()
  5.         {
  6.                 System.out.println("父类空构造函数初始化动作");
  7.         }
  8.         Animal(String name)
  9.         {
  10.                 this.name = name;
  11.                 System.out.println("父类 String name构造函数的初始化动作");        
  12.         }
  13. }
  14. class Bird extends Animal
  15. {
  16.         private String name;
  17.         private int age;
  18.         Bird()
  19.         {        
  20.                 //super(); 默认的语句,因子类继承了父类,所以父类空构造函数是默认执行的。
  21.                 System.out.println("子类空构造函数初始化动作");        
  22.         }
  23.         Bird(String name)
  24.         {
  25.                 super(name);//对应的父类带(String name)的构造函数,这里不可以执行super();
  26.                 this.name = name;
  27.                 System.out.println("子类String name构造函数的初始化动作");
  28.         }
  29.         Bird (String name,int age)
  30.         {
  31.                 this();//本类对象调用
  32.                 //this(name); //这里this()或this(name)只能出现一个,因为this()只能出现在构造函数的第一行
  33.                                         //super()也是一样,只能出现在构造函数的第一行,并且在这里调用super(String name ,int age)的构造方法
  34.                 this.name = name;
  35.                 this.age = age;
  36.                 System.out.println("子类String name,int age 构造函数的初始化动作");
  37.                
  38.         }

  39. }

  40. class SuperDemo
  41. {
  42.         public static void main(String[] args)
  43.         {
  44.                 Bird b1 = new Bird();
  45.                 System.out.println("========================================================");
  46.                 Bird b2 = new Bird("小鸟");
  47.                 System.out.println("========================================================");
  48.                 Bird b3 = new Bird("小鸟",17);
  49.         }
  50. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马