java的this和super

概念

this指代当前对象,持有当前对象的地址

作用

  1. 解决二义性

  2. 作为参数传递

  3. 作为返回值

  4. 构造方法之间的相互调用

    public class _04ThisDemo {
     public static void main(String[] args){
         Teacher t=new Teacher();
         //作为参数传递
         t.test1();
         //作为返回值
         System.out.println(t.test3());
         //构造方法之间的相互调用
         Teacher t1=new Teacher("小名",5);
         System.out.println(t1.getName());
       }
     }
    class Teacher {
     private String name;
     private int age;
    
     Teacher(String name,int age){
         this(name);
         this.age=age;
     }
     Teacher(String name){
         System.out.println("我是从上面下来的");
         this.name=name;
     }
     //Teacher(){
     //  this("小莫",32);
     //}
     Teacher(){
     //this作为参数传递
     void test1(){
         System.out.println(this);
         test2(this);
     }
     void test2(Teacher t){
         System.out.println(t+"我被传递了");
     }
     
     //this 作为返回值
     Teacher test3(){
         return this;
     }
    }
    

    super

概念

在子类中表示父类的对象

使用

  1. 访问父类的普通属性 super.name

  2. 调用父类的普通方法 super.run()

  3. 构造方法

    子类的构造方法一定会调用到父类的构造方法

    • 子类的构造方法含有一个隐式的父类无参构造方法 super();
    • 如果调用了父类的有参构造方法,隐式的将不复存在 super("小明");
class _02SuperTest {
    public static void main(String[] args){
        System.out.println("Hello World!");
        B b1=new B();
        //打印两句 父类 无参和子类无参
        B b2=new B("小明");
        //打印两句 父类有参和子类有参
        B b3=new B("小明",20);
        //打印两句 父类无参和子类两个参
    }
}
class A{
    String name;
    A(){
        System.out.println("我是父类的无参构造方法");
    }
    A(String name){
        System.out.println("我是父类的有参构造方法");
    }
}
class B extends A{
    //子类在创建对象的时候,会隐式调用父类中的无参构造方法
    //如果有显式调用父类的构造方法,隐式的就不复存在
    int age;
    B(){
        System.out.println("我是子类的无参构造方法");
    }
    B(String name){
        super("test");
        System.out.println("我是子类的有参构造方法");
    }
    B(String name,int age){
        System.out.println("我是子类的有两个参的构造方法");
    }
}

你可能感兴趣的:(java的this和super)