前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中的 this 和 super

Java中的 this 和 super

作者头像
头发还在
发布2023-10-16 11:00:03
1290
发布2023-10-16 11:00:03
举报
文章被收录于专栏:桃花源桃花源

1 this 关键字

1.1 this 访问本类属性

this 代表对当前对象的一个引用

  • 所谓当前对象,指的是调用当前类中方法或属性的那个对象
  • this只能在方法内部使用,表示对“调用方法的那个对象”的引用
  • this.属性名,表示本对象自己的属性

当对象的属性和方法或构造器中,名称相同时,用 this 以示区分。

代码语言:javascript
复制
public class Person{
    String name;
    public Person(String name){
        //用以区分对象中的属性名,参数名
        this.name = name;
    }
}

1.2 this 调用方法

this关键字调用类的重载构造函数

this关键字必须位于构造函数的第一行

代码语言:javascript
复制
public class Person{
    String name;
    int age;
    public Person(int age){
        this.age = age;
    }
    public Person(String name){
        this(1);
        this.name = name;
    }
}

this.方法名:表示当前对象自己的方法

代码语言:javascript
复制
public class Student{
    public void eat(){
        System.out.println("吃饭");
    }
    public void talk(){
        this.eat();
        System.out.println("吃完饭再说话");
    }
}

1.3 this 关键字使用注意

this 不能用于静态方法和静态块

main 方法也是静态的,所以 this 也不能用于 main 方法

2 super 关键字

2.1 super 访问构造函数

在继承中,子类的构造函数必须依赖父类提供的构造函数

super(参数列表) 访问父类的构造函数

super 调用父类的构造函数,必须在子类构造函数的第一行

代码语言:javascript
复制
//父类
public class Person{
    public Person(){}
}
//子类
public class Student extends Person{
    public Student(){
        super();
    }
}

在继承中,子类的构造函数必须依赖父类提供的构造函数

代码语言:javascript
复制
//父类中只有带参构造方法
public class Base {
  String name;
  int age;
  
  public Base(String name, int age){  
  }
}
代码语言:javascript
复制
//子类构造方法必须依赖父类
public class Son extends Base{
  public Son(){
    //如果父类提供的只有带参构造方法,子类的构造方法必须依赖父类提供的现有构造方法;
    //使用super(参数列表)去访问父类提供的构造函数,且必须明确写出参数;
    //super必须在第一行
    super("张三", 20);
  }
}

2.2 super访问父类的属性

在子类的方法或构造器中,通过使用 super.属性 来访问父类属性

应用场景:

当子类和父类中定义了同名的属性时,想要调用父类中声明的属性,需要通过 super.属性 的方式来表明调用的是父类中声明的属性。

代码语言:javascript
复制
public class Car{
  //车架号
  int id;
}

class Benz extends Car{
  //内部车辆编号
  int id; 
  public void showInfo(){
    System.out.println("车架号是:" + super.id + " 内部车辆编号:" + id);
  }
}

2.3 super 访问父类的方法

在子类的方法或构造器中,通过使用 super.方法名 来调用父类的方法

代码语言:javascript
复制
public class Car{
  public void drive(){
    System.out.println("驾驶");
  }
}

class Benz extends Car{
  public Benz(){
    //访问父类方法
    super.drive();
  }
}

3 super 和 this 的区别

super() 是调用父类的构造函数,必须在构造函数的第一行

this() 是调用本类的构造函数,必须在构造函数的第一行

super() 和 this() 在同一个构造方法中,不能同时出现

super

this

代表对象

代表父类对象的引用

当前对象本身

前置

只有在继承条件下才能使用

没有继承也可以使用

构造方法

父类构造

本类构造

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 this 关键字
    • 1.1 this 访问本类属性
      • 1.2 this 调用方法
        • 1.3 this 关键字使用注意
        • 2 super 关键字
          • 2.1 super 访问构造函数
            • 2.2 super访问父类的属性
              • 2.3 super 访问父类的方法
              • 3 super 和 this 的区别
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档