Java中的super关键字和this关键字作用介绍

、super关键字的作用

  1、子类在构造方法中显示调用父类构造方法

      super可以在子类的构造方法中显示调用父类的构造方法;并且这行代码必须出现在子类构造方法的第一行。原因:因为父类构造方法没有执行之前父类的属性和方法还没有被创建,则子类不能继承父类的属性和方法,因此子类的构造方法不能被执行。

/**
 * 子类:构造方法的第一行要保证显示或者隐式的调用构造方法
 * @author Administrator
 *
 */
public class Teacher extends Person {
    //继承自父类的空构造函数
    public Teacher() {
        
    }
    public Teacher(String name, int age, String gender) {
//1. 出现在子类构造函数的第一行,用于调用父类的构造方法
super(name, age, gender); } private String course; public void teach() { System.out.println("教..."); } }

  2.可以在子类中充当临时父类对象

     可以在子类内部代表父类对象,从而在子类中访问父类的属性和方法

class Person01 {
    private String name;
    private int age;
    public void say() {
        System.out.println("人说....");
        return null;
    }
    public void eat() {
        System.out.println("人吃....");
    }
}
class Teacher01 extends Person01 {
    @Override
    public C say() {
        System.out.println("老师在一本正经的说...");
        return null;
    }
    //注解的作用:防止开发者误写,起到提示作用
    @Override
    public void eat() {
        System.out.println("洗个手");
        //2. super作用:super类似于父类的虚拟对象
        super.eat();
        System.out.println("抽根烟...");
    }
}

 二、this关键字的作用

  1、代表当前对象

     在类的内部永远代表正在执行此代码的对象;在成员方法和构造方法内部,都可以通过this来明确访问类中的成员属性和成员方法。

public class Person03 {
    String name;
    int age;
    //构造代码块:直接在类中编写一对大括号,构造代码块可以访问到之前定义的属性
    { 
        System.out.println("构造代码块!" + name);
    }
    
    { 
        say();
        
        System.out.println("构造代码块2!" + this);
    }
    
    public Person03(){
        System.out.println("构造方法!");
    }
    public Person03(String name, int age) {
//1. 指向无参构造方法
this();
//2. 代表正在执行此代码的对象
this.name = name; this.age = age; } void say() { System.out.println("成员方法说动作"); } { say(); System.out.println("构造代码块3!"); } public static void main(String[] args) { Person03 p = new Person03(); p.say(); //匿名创建对象:创建对象只会用一次并且立即使用,而不用赋值给一个引用,即为创建了一个匿名对象 new Person03().say(); } }

  2、指向某个构造方法

  在构造方法内部通过this(参数列表),可以调用其他构造方法。

注意:使用这种用法时,this()必须出现在当前构方法的第一行

三、super和this的共同点和区别

       共同点:super和this都可以代表一个临时对象执行构造函数,并且都要放在构造函数的第一行;

       不同点:super一般用在子类中,用于代表父类的对象;this用于当前类中,用于代表正在执行该代码的对象。

 

posted @ 2019-04-11 09:37  虎啸千峰  阅读(6531)  评论(0编辑  收藏  举报