黑马程序员技术交流社区

标题: super的使用不懂 [打印本页]

作者: 747437484    时间: 2013-12-25 16:01
标题: super的使用不懂
public class Test9{
    public static void main(String args[]){
   b c = new  b("小花",20);
    c.sayHello();
    }
}
class a{
  String name;
  int age;
  a(){
  }
a(String name,int age){
      this.name=name;
   this.age=age;
     }
void sayHello(){
      System.out.println("我叫"+name+","+"今年"+age+"岁了");
      }
}
class b extends a{
        b(String name ,int age){
               
                                super(name);这里为啥错误
                                super(age);
          }

     
}
作者: 杨道红    时间: 2013-12-25 16:08
public class Test9{
    public static void main(String args[]){
   b c = new  b("小花",20);
    c.sayHello();
    }
}
class a{
  String name;
  int age;
  a(){
  }
a(String name,int age){
      this.name=name;
   this.age=age;
     }
void sayHello(){
      System.out.println("我叫"+name+","+"今年"+age+"岁了");
      }
}
class b extends a{
        b(String name ,int age){
               
                              //  super(name);这里为啥错误
                                //super(age);
                          super(name,age);

          }

}
A类中没有a(String name){}
a(int age){}构造函数


作者: 75100313    时间: 2013-12-25 16:09
继承的构造方法写错了 父类是2个参数 我帮你改过来了
  1. package com.mth.thread;

  2. public class Test9 {
  3.         public static void main(String args[]) {
  4.                 b c = new b("小花", 20);
  5.                 c.sayHello();
  6.         }
  7. }

  8. class a {
  9.         String name;
  10.         int age;

  11.         a() {
  12.         }

  13.         a(String name, int age) {
  14.                 this.name = name;
  15.                 this.age = age;
  16.         }

  17.         void sayHello() {
  18.                 System.out.println("我叫" + name + "," + "今年" + age + "岁了");
  19.         }
  20. }

  21. class b extends a {
  22.         b(String name, int age) {
  23.                 super(name, age);
  24.         }
  25. }
复制代码

作者: 2013_ok    时间: 2013-12-25 16:15
public class Test9{
     public static void main(String args[]){
    b c = new  b("小花",20);
     c.sayHello();
     }
}
class a{
   String name;
   int age;
   a(){
   }
a(String name,int age){
       this.name=name;
    this.age=age;
      }
void sayHello(){
       System.out.println("我叫"+name+","+"今年"+age+"岁了");
       }
}
class b extends a{
         b(String name ,int age){
                 
                                 super(name);这里为啥错误     父类里a有这个构造方法吗
                                super(age);       super方法必须放在第一句调用,你一个方法里调用了两次,无论谁前谁后,都会报错
           }

      
}
作者: 弘一    时间: 2013-12-25 16:44
super是一个关键字,是代表父类存储空间标识(可以了解父类引用)

调用父类成员变量
        super.成员变量
父类构造方法(父类的构造方法需要传入什么参数,就需要传入什么参数)
        super(参数列表);
成员方法
        super.成员方法

修改代码如下:
public class Test9{
    public static void main(String args[]){
   b c = new  b("小花",20);
    c.sayHello();
    }
}
class a{
  String name;
  int age;
  a(){
  }
a(String name,int age){
      this.name=name;
   this.age=age;
     }
void sayHello(){
      System.out.println("我叫"+name+","+"今年"+age+"岁了");
      }
}
class b extends a{
        b(String name ,int age){
               
                //更改,这是对应父类的构造方法
                                super(name,age);       
          }

     
}
作者: kun1990    时间: 2013-12-26 00:36
  1. public class Test9{
  2.     public static void main(String args[]){
  3.    b c = new  b("小花",20);
  4.     c.sayHello();
  5.     }
  6. }
  7. class a{
  8.   String name;
  9.   int age;
  10.   a(){
  11.   }
  12. a(String name,int age){
  13.       this.name=name;
  14.    this.age=age;
  15.      }
  16. void sayHello(){
  17.       System.out.println("我叫"+name+","+"今年"+age+"岁了");
  18.       }
  19. }
  20. class b extends a{
  21.         b(String name ,int age){
  22.                
  23.                        //         super(name);这里为啥错误
  24.                           //      super(age);
  25.                        //修改的代码
  26.                      super(name,age);
  27.           }

  28.      
  29. }
复制代码


super所表示的是父类的空间的标识。
你在类中使用super(name)和super(age)表示的是继承父类的包含name的构造以及age的构造,但是你的父类没有这些,所以报错。
作者: 由然自美    时间: 2013-12-27 11:33
class b extends a{
        b(String name ,int age){
               
                                super(name);这里为啥错误
                                super(age);
          }

     
}
因为super只能写在子类构造函数的第一行,super(name);分号已经意味着这句话结束了,所以super(age);相当于第二行,就会报错.可以写成super(name,age);就没有问题了




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