public class people{
   public String pname;
   people(String name){
      pname=name;
   }
}
public class student extend people{
    public String pname;
    public int stunum;
    animal(String name,int num){
       super(name);
       //people(name);
       stunum=num;
       //this.stunum=num;
    }
} super据说是调用父类的构造函数,那么既然student继承people,不可以在student里直接调用people(String name)构造函数么?
同样在一个类里stunum=num;和this.stunum=num;有什么区别么?

解决方案 »

  1.   

    super(name)就代表people(name),而且只能用super(name)
    stunum=num;和this.stunum=num;没有区别。
      

  2.   

    一 调用构造器有3种方法
    1 默认构造器。 如果父类有可用的无参数构造器,则子类在没有指定的时候,会自动调用父类的构造器
    2 指定调用父类的某个构造器,就是suer(name) 的用法
    3 指定调用本类的另一个构造器,就是this(name)的用法你说的直接调用people(String   name),没有这种语法。二 如果你的类的属性也叫num,传进来的参数也叫num, 那个 num=num 你怎么区分? 所以需要指定是类的num赋值为参数的num
    this.num = num;你的那个例子不具备代表性,所以不写this也不会有问题。但依然推荐写上。
      

  3.   

    super()
    只能在 子类的构造方法中
    且必须是第一句但是 可以通过 名字随处 调用
      

  4.   

    那么调用父类构造函数super(name)和this(name)有什么区别?
      

  5.   

    1、可以在子类的构造函数中调用父类的构造函数
    2、使用this关键字更符合面向对象的思想,声明了是本类的实例的属性赋值为:××以上是一些愚见,捡有用的看,始终批判着看 :)
      

  6.   

    1.构造函数不可被继承
    2.this.x调用的一定是类当前对象的成员变量 而不加this表示当前作用域内的变量
      

  7.   

    this关键字的两个用途:
       引用隐式参数,也就是被构造的对象(除私有方法外,先找子类方法后找父类中的方法)。
       调用该类其他的构造器。
    super关键字的两个用途:
       调用超类的方法(除私有的方法外,直接调用父类中的方法)
       调用超类的构造器。
    this,super关键字相同处:
       调用构造器的语句只能作为另一个构造器的第一条出现。
       不能在静态方法中使用this和super。super的另外一种用法(内部类):enclosingClassReference.super();俺的总结!