文章目录

  • 1.this
    • 1.1. this是什么?
    • 1.2 this调用对象中的属性、构造器和方法
  • 2.super
    • 2.1 super是什么?
    • 2.2 super调用父类的属性、构造器、方法
  • 3. this与super 比较

本篇文章已同步到:https://www.bithachi.cn/posts/720ba9d4.html

1.this

1.1. this是什么?

  • this是Java中的关键字,它的作用和其词义很接近,这个
    它在方法内部使用,即这个方法所属对象的引用;
    它在构造器内部使用,表示该构造器正在初始化的对象。
  • this 可以调用类的属 性、方法和构造器
  • 什么时候使用this关键字呢?
    当在方法内需要用到调用该方法的对象时,就用this。
    具体的:我们可以用this来区分属性和局部变量。
    比如:this.name = name;

1.2 this调用对象中的属性、构造器和方法

规则:

  1. 在任意方法或构造器内,如果使用当前类的成员变量或成员方法可以在其前面添加this,增强程序的阅读性。不过,通常我们都习惯省略this。
  2. 当形参与成员变量同名时,如果在方法内或构造器内需要使用成员变量,必须添加this来表明该变量是类的成员变量
  3. 使用this访问属性和方法时,如果在本类中未找到,会从父类中查找
  4. this可以在一个类中相互调用构造器
public class Person {private String name;private int age;public Person(){ // 无参构造器System.out.println("新对象实例化") ;}public Person(String name){this(); // 调用本类中的无参构造器this.name = name ;}public Person(String name,int age){this(name) ; // 调用有一个参数的构造器this.age = age;}public void getInfo() {System.out.println("对象的姓名:" + name);this.speak();//this指代当前操作的对象p1}public void speak() {int age=20;System.out.println("局部变量年龄: "+age);System.out.println("对象的年龄:" + this.age);}public static void main(String[] args) {Person p1 = new Person("王五", 18);p1.getInfo();}
}

运行结果:

新对象实例化
对象的姓名:王五
局部变量年龄: 20
对象的年龄:18

2.super

2.1 super是什么?

  • super是Java的关键字

  • 在Java类中使用super来调用父类中的指定操作:

    1. super可用于访问父类中定义的属性,protected,public,default

    2. super可用于调用父类中定义的成员方法

    3. super可用于在子类构造器中调用父类的构造器

      • 当父类中没有空参数的构造器时,子类的构造器必须通过this(参数列表或者super( 参数列表)语句指定调用本类或者父类中相应的构造器。同时,只能”二选一”,且必须放在构造器的首行

      • 子类中所有的构造器默认都会访问父类空参数构造器

      • 如果子类构造器中既未显式调用父类或本类的构造器,且父类中又没有无参的构造器,则编译出错

注意:

  1. 当子父类出现同名成员时,可以用super表明调用的是父类中的成员
  2. super的追溯不仅限于直接父类
  3. super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识

2.2 super调用父类的属性、构造器、方法

/*** @Program: JavaSE* @ClassName: Person* @Author: Mr.BitHachi* @CreateTime: 2020-07-30 18:07* @Version: V1.0* @Description:**/
public class Person {private String name;private int age;private Date birthDate;public String isPublic="isPublic";protected String isProtected="isProtected";private String isPrivate="isProtected";String isDefault="isDefault";public String getInfopublic() {return "getInfopublic:Name: " + name + "  age: " + age;}private String getInfoPrivate() {return "getInfoPrivate:Name: " + name + "  age: " + age;}protected String getInfoProtected() {return "getInfoProtected:Name: " + name + "  age: " + age;}String getInfoDefault() {return "getInfoDefault:Name: " + name + "  age: " + age;}public Person(String name, int age, Date d) {this.name = name;this.age = age;this.birthDate = d;}public Person(String name, int age) {this(name, age, null);}public Person(String name, Date d) {this(name, 22, d);}public Person(String name) {this(name, 22);}
}
/*** @Program: JavaSE* @ClassName: Studnet* @Author: Mr.BitHachi* @CreateTime: 2020-07-30 20:25* @Version: V1.0* @Description:**/public class Student extends Person {private String school;public Student(String name, int age, String s) {super(name, age);school = s;}public Student(String name, String s) {super(name);//调用父类的构造器school = s;}//this和super测试调用父类的属性和方法,不能调用父类的private修饰的属性和方法public void display(){System.out.println(this.isDefault);System.out.println(this.isProtected);System.out.println(this.isPublic);System.out.println("----------------");System.out.println(super.isDefault);System.out.println(super.isProtected);System.out.println(super.isPublic);System.out.println("----------------");System.out.println(this.getInfoDefault());System.out.println(this.getInfoProtected());System.out.println(this.getInfopublic());System.out.println("----------------");System.out.println(super.getInfoDefault());System.out.println(super.getInfoProtected());System.out.println(super.getInfopublic());}// 编译出错: 没有 super(),系统将调用父类无参数的构造器。// Person没有无参数的构造器
//    public Student(String s) {//        school = s;
//    }public static void main(String[] args) {Student s=new Student("BitHachi","加里敦大学");s.display();}
}

运行结果:

isDefault
isProtected
isPublic
----------------
isDefault
isProtected
isPublic
----------------
getInfoDefault:Name: BitHachi  age: 22
getInfoProtected:Name: BitHachi  age: 22
getInfopublic:Name: BitHachi  age: 22
----------------
getInfoDefault:Name: BitHachi  age: 22
getInfoProtected:Name: BitHachi  age: 22
getInfopublic:Name: BitHachi  age: 22

3. this与super 比较

java中的关键字:this与super 大详解相关推荐

  1. java中sleep()、wait()相同与不同详解

    java中sleep().wait()相同与不同详解 相同 java中Thread#sleep和Object#wait方法都是暂停当前线程,当前线程让出CPU占用.并不存在调用sleep后还占用CPU ...

  2. Java中的宏变量,宏替换详解。

    转载自 Java中的宏变量,宏替换详解. 群友在微信群讨论的一个话题,有点意思,特拿出来分享一下. 输出true false 来看下面这段程序,和群友分享的大致一样. public static vo ...

  3. java 抽象 属性_在java中如何定义一个抽象属性示例详解

    前言 本文主要给大家介绍的是在java中定义一个抽象属性的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: Abstract关键字通常被用于类和方法,用来把某些行为的实现委托给 ...

  4. JAVA中Explain注解用法,mysql之explain详解(分析索引最佳使用)

    mysql之explain详解(分析索引最佳使用) mysql explain用于分析sql 语句的执行及数据库索引的使用.本文将致力于帮助大家充分理解explain所返回的各项参数,从而使大家快速掌 ...

  5. Java中的Math类和日期类详解

    Math类是定义了一系列的数学运算方法,是使用static修饰的方法,表示可以通过Math类直接访问.我们在开发中一般只需要关注两个: ·四舍五入: ·取得随机数 四舍五入 API文档中描述: rou ...

  6. java中object类型_Java常用类object详解

    1.Object概述: 类Object是类层次结构的根类.每个类都使用Object作为超类.所有对象(包括数组)都实现这个类的方法. 2.构造方法详细信息: Object只有一个无参构造方法,因为ob ...

  7. java中的静态变量的作用域_详解JAVA中static的作用

    1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...

  8. JAVA中的String[] args和String args[]详解。

    JAVA中的String[] args和String args[]是什么意思? 1.是什么意思? 2.怎样给args赋值? 3.补充事项 1.是什么意思? Java中的String[] args 和S ...

  9. Java 中的自动装箱和拆箱详解

    自动装箱是 Java 编译器在基本类型和它们对应的包装类之间进行的自动转换.例如,将 int 类型转换为 Integer 类型,将 double 类型转换为 Double 型等等.如果转换以相反的方式 ...

最新文章

  1. linux中shell如何输出换行符
  2. ecshop模板支持php,[老杨原创]关于ECSHOP模板架设的服务器php版本过高报错的解决方法集合...
  3. (十三)java版spring cloud+spring boot+redis社交电子商务平台-springboot集成spring cache...
  4. [Documentation]porting
  5. 【无标题】自己动手写Docker系列 -- 6.3 手动配置容器网络(上)
  6. 最全的Vim操作快捷键
  7. Python|LeetCode习题答案汇总
  8. Excel技能培训之十四 统计函数count,countif,counta,countblank,large,small,average,max,min
  9. Python词频统计的3种方法
  10. 织梦dedecms怎么改模板
  11. 一个非常好用的批量图片压缩工具
  12. angular directive详解
  13. SQL->基础->进阶
  14. 李子柒:不希望年轻人当网红...
  15. mysql修改列明sql语句_sqlserver 修改列名及表名的sql语句
  16. matlab实现图像DCT变换
  17. 使用Windows任务计划自动运行Python程序
  18. C#入门教程(一)visual studio与winform
  19. windows11系统正版来了,windows11系统官方版下载方式,windows11系统镜像来了
  20. 平台云基石-CoreOS之集群篇(无需互联网)

热门文章

  1. 洛谷P1133 教主的花园 动态规划
  2. JS实现html国际化二
  3. Unity3D脚本中文系列教程(五)
  4. 个人管理 - 程序员的四个阶段
  5. 怎样建设WEB Cache
  6. 五种最易被老板开除的人
  7. 783. 二叉搜索树节点最小距离
  8. spring boot 整合web开发之文件上传、静态资源访问、异常处理、返回JSON数据
  9. 设计模式-装饰模式(Decorator Pattern)
  10. 【github技巧】解决githubusercontent打不开的问题