• 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用于当前类中,用于代表正在执行该代码的对象。

  • 相关阅读:
    css
    js
    css3
    css
    深浅拷贝
    index-数据结构/算法
    es6知识点
    在vscode中配置sass savepath
    计算机基础
    element-ui使用后手记
  • 原文地址:https://www.cnblogs.com/chhyan-dream/p/10685961.html
Copyright © 2020-2023  润新知