前言:理论和代码必须结合起来才能真正的掌握

一、this

概念:this代表着当前对象的引用,也是当前函数所属对象的引用。直白的说,哪个对象调用了当前函数,this就代表哪个对象。

常见的用法(理论不理解就先参考下面案例)

this使用案例

class Student extends Person{

public Student(String name, int age, String nation) {

super(name);

}

}

public class Person{

private String name;

private int age;

private static String nation = "chinese";

public Person(String name) {

this.name = name;

}

public Person(String name, int age) {

//初始化方法必须放到第一行

this(name);

this.age = age;

}

//局部变量name和age屏蔽了name和age属性,用this进行标识

public Person(String name, int age,String nation) {

this.name = name;

this.age = age;

//this可以调用到静态属性

this.nation = nation;

}

public void test(){

System.out.println("测试");

}

public static void test2(){

//静态方法内不能出现this或super

System.out.println("测试");

}

public void print(){

//调用类内部的方法(toString已重写)加不加this都行

this.toString();

}

@Override

public String toString() {

return "Person{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

public static void main(String[] args) {

//这个this代表的student对象

Student student = new Student("wzh",20,"chinese2");

System.out.println(student.toString());

//这个this代表的是person对象

Person person = new Person("wzh2",20,"chinese3");

System.out.println(student.toString());

//扩展,全局变量nation的值最后是chinese3

System.out.println(Person.nation);

}

}

结果:

二、super

概念:

super可以理解为“父类的”,super可以在子类中调用父类的属性,方法,构造器,super关键字和this一样能省就省;

注意点:

1、this和super很像,this指向的是当前对象的调用,super指向的是当前调用对象的父类

2、类加载完毕,创建对象,父类的构造方法会被调用

父类如果重写了无参构造器或者父类中没有有参构造器,那么子类的构造方法第一行就是super(),可以省略

class Student extends Person{

//这是默认的构造器内容,写出来是为了帮大家理解

public Student(){

super();

}

}

public class Person{

private String name;

private int age;

}

如果父类中定义了有参构造器但没有显示写出无参构造器,那么必须通过super调用父类的有参构造函数,如果父类中定义了多个有参构造区,那么用super调用其中一个有参构造器即可

class Student extends Person{

public Student(String name, int age) {

//任选一个父类有参构造

//super(name, age);

super(name);

}

}

public class Person{

private String name;

private int age;

public Person(String name, int age) {

this.name = name;

this.age = age;

}

public Person(String name) {

this.name = name;

}

}

3、子类相应构造创建了一个子类对象,该子类对象还包含了一个父类对象。该父类对象在子类对象内部(正如子类的构造器无论如何都要通过super调用父类构造器一样,子类的对象被成功构造,那么它的内部就会包含父类的对象),证明如下

子类重写父类的方法后可以通过super调用到父类的方法

class Student extends Person {

private String name = "wzh2";

@Override

public String getName() {

return "子类" + name;

}

public String getParentName(){

//调用父类的方法

return super.getName();

}

public static void main(String[] args) {

Student student = new Student();

System.out.println(student.getName());

System.out.println(student.getParentName());

}

}

public class Person{

//protected意味着子类和同一包中可以访问

protected String name = "wzh";

protected int age = 20;

public String getName() {

return "父类" +name;

}

}

输出结果

子类获取到父类的变量

class Student extends Person{

public void parentDisplay(){

System.out.println(super.age + super.name);

}

public static void main(String[] args) {

new Student().parentDisplay(); //输出结果:20wzh

}

}

public class Person{

//protected意味着子类和同一包中可以访问

protected String name = "wzh";

protected int age = 20;

}

调用父类的构造器

不再举例

4、this super只能在有对象的前提下使用,不能在静态上下文使用

5、如果一个类没有基础任何父类,super还有用吗?肯定有用,可以调用Object中的方法

public class Person{

private String name;

private int age;

public void display(){

//通过this或super调用到了Object的toString();

System.out.println(super.toString());

}

public static void main(String[] args) {

new Person().display(); //输出为Person@452b3a41

}

}

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

java this和super_Java中超详细this与super的概念和用法_Java_软件编程相关推荐

  1. java pdf 用系统字体大小_java 用itext设置pdf纸张大小操作_Java_软件编程

    做快递面单打印模板,快递要求纸张大小100 x 150mm. PageSize.A4=595 x 842 A4尺寸=210mm×297mm 故设置纸张大小: public static final R ...

  2. Java并发知识总结,超详细!(上)

    Java并发知识总结,超详细! 首先给大家分享一个github仓库,上面放了 200多本经典的计算机书籍 ,包括C语言.C++.Java.Python.前端.数据库.操作系统.计算机网络.数据结构和算 ...

  3. java面试题答案大全超详细(持续更新)

    java面试题答案大全超详细 第01章 java语言面试题 项目经理(作者):张明星 JVM 运行时数据区是什么? 程序计数器是什么? 程序计数器(线程私有) Java 虚拟机栈的作用? 本地方法栈的 ...

  4. 转 :2019年Java大厂面试(吐血超详细总结)

    2019年Java大厂面试(吐血超详细总结) 本文来自于慕课网手记:Java大厂面试(吐血超详细总结),转载请保留链接 ;) 转载自:https://www.imooc.com/article/286 ...

  5. java什么是super_java中的super是什么

    java中的super是什么 发布时间:2020-07-01 11:00:48 来源:亿速云 阅读:83 作者:Leah java中的super是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题 ...

  6. java 构造 super_Java中的构造方法this、super的用法详解

    1.构造方法 定义:与类同名没有返回值的方法称为构造方法: public class test1 { private String name; private int age; public test ...

  7. 转:Java多线程学习(吐血超详细总结)

    版权声明:本文为博主林炳文Evankaka原创文章,转载请注明出处http://blog.csdn.net/evankaka 目录(?)[+] 林炳文Evankaka原创作品.转载请注明出处http: ...

  8. Java接口和包(超详细)

    目录 前言 接口 声明接口 接口的实现 接口的继承 实现多个接口时的常量和方法冲突问题 包 包的创建 导入包 Java的系统包 常用工具包 java.lang包 java.util包 最后 前言 什么 ...

  9. Java多线程学习(吐血超详细总结)【转】

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable ...

  10. (转) Java多线程学习(吐血超详细总结)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但 ...

最新文章

  1. 什么是“可证伪性”?
  2. echart 图谱_zrend echart 展示家庭图谱示例代码(类思维导图)
  3. activiti学习--08 连线
  4. 主备库内存不一致的Data Guard环境搭建全过程
  5. 【Docker】Docker 启动prometheus报错 parsing YAML file /etc/prometheus/prometheus.yml: yaml: unmarshal
  6. 电脑扫描文件怎么弄_彻底清除手机垃圾文件,释放内存的方法
  7. UVA 11237 - Halloween treats(鸽笼原理)
  8. 连接器教程---凯利讯半导体
  9. 银行卡识别技术-移动支付新宠儿
  10. QComboBox实现下拉框check勾选
  11. 现货黄金宝典——如何做突破行情
  12. 开发者百度地图的使用,做一个小demo,ak秘钥,
  13. python将英文翻译为中文_Python使用百度翻译开发平台实现英文翻译为中文功能示例...
  14. 如何选择适合你的兴趣爱好(三十三),国画
  15. Docker之网络模式和数据卷
  16. stripe支付集成
  17. 【SemiDrive源码分析】【X9芯片启动流程】20 - MailBox 核间通信机制介绍(代码分析篇)之 MailBox for RTOS 篇
  18. 操作系统原理实验-进程同步
  19. 计算机安装xp蓝屏怎么办,谁知道电脑装XP中途蓝屏怎么处理?
  20. AWS和Azure的区域

热门文章

  1. 代码之美~Func让构造方法为属性赋值更灵活
  2. 搭建证书服务器(2003)学习笔记
  3. Java基础之Java 修饰符
  4. MARQUEE 字符滚动条效果
  5. Builder模式的误区:将复杂对象的构建进行封装,就是Builder模式了吗?
  6. Spinner的简单实用
  7. oracle 自定义比较函数
  8. 只有 IE 才有的 Bug or feature?
  9. 初体验这个平台很强大
  10. MAC安装软件 brew 问题记录