this 与super在java中运用整合

 A.使用关键字this的准则

1.在构造器中,如果要使用关键字this,那么,必须放在第一行,否则将导致一个编译错误。

2.构造方法引用this指向正在执行方法的类的实例。静态方法不能使用this关键字,因为静态方法不属于类的实例,所以this也就没有什么东西去指向。构造器的this指向同一个类中,不同参数列表的另外一个构造器,我们看看下面的代码: 

public class Platypus {

String name;

Platypus(String input) {
   name = input;
   }

Platypus() {
   this("John/Mary Doe");
   }

public static void main(String args[]) {
   Platypus p1 = new Platypus("digger");
      Platypus p2 = new Platypus();
    }
}

    在上面的代码中,有2个不同参数列表的构造器。第一个构造器,给类的成员name赋值,第二个构造器,调用第一个构造器,给成员变量name一个初始值 "John/Mary Doe".

注意:尽管可以用this调用一个构造器,但却不能调用两个。此外,必须将构造器调用置于最起始位置,否则编译会出错。

B.使用super时的准则

1.构造器使用super去调用超类中的构造器。而且这行代码必须放在第一行,否则编译将出错。

2.无论构造器和方法,都用关键字super指向超类,但是用的方法不一样。方法用这个关键字去执行被重载的超类中的方法。

class Mammal1{
     void getBirthInfo() {
        System.out.println("born alive.");
   }
}
class Platypus2 extends Mammal {

    void getBirthInfo() {
       System.out.println("hatch from eggs");
       System.out.print("a mammal normally is ");
        super.getBirthInfo();
   }
}
public class TestMammal{ 
   public static void main(String[] args){
      Platypus2 pl = new Platypus2();
   }
}

Super 的使用有三种情况:

  1)访问父类被隐藏的成员变量,如:
    super.variable;

  2)调用父类中被重写的方法,如:
    super.Method([paramlist]);

  3)调用父类的构造函数,如:
    super([paramlist]);


 

三种情况说明:

1、父类中没有显式定义任何构造方法,此时父类中实际有一个默认的无参数构造方法。这时,在子类中显式定义任何构造方法时,可以不用使用super调用父类的默认方法。

 

2、父类中显式定义了默认的无参数构造方法,那么子类可以定义任意的构造方法,而不必使用super调用父类的构造方法

 

3、父类中显示定义了构造方法,却没有显示定义默认的无参数构造方法,那么子类定义任何构造方法中都需要通过super调用父类的构造方法(该语段转载)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值