Java 面向对象:super关键字的理解

一、Super关键字:

1. super调用父类的构造方法,必须在构造方法的第一个

2. super只能出现在子类的方法或构造方法中!

3. super和this不能同时调用构造方法!


二、this与super的区别:

1. 代表的对象不同:

this:本身调用者的这个对象,保存着调用对象的内存地址

super:代表父类的对象


2. 前提:

this:没有继承也可以使用

super:只能符合继承条件才能使用


3.构造方法:

this() 表示本类的构造器

super() 表示父类的构造器


范例:

Person类只有有参构造

public class Person {//有参构造public Person(String name) {System.out.println("Person无参执行了");}protected String name = "Person";public void print() {System.out.println("Person");}}

子类:Student类则需显示调用父类的构造方法

//学生 is 人 人的子类
//子类继承父类,子类就会拥有父类所有的方法
public class Student extends Person {public String name = "Student";public Student() {super("name");// 如果调用父类的有参构造器,super()须放在子类构造器的第一行且要显示调用System.out.println("Student无参执行了");}public void print() {System.out.println("Student");}public void test() {print();this.print();super.print();}
}

三、何时用super关键字?

1.如果父类和子类有同名属性,子类要访问父类的同名属性,需要加super关键字!

示例一,子类Vip没有父类的name属性,子类去访问父类的name:

package Day0206.Demo02;public class Customer {String name;public Customer() {}public Customer(String name) {this.name = name;}public static void main(String[] args) {Vip vip = new Vip("张三");vip.shopping();}
}
class Vip extends Customer{public Vip() {}public Vip(String name) {super(name);}public void shopping() {System.out.println(this.name+"正在购物");System.out.println(super.name+"正在购物");System.out.println(name+"正在购物");}}
结果:当子类Vip没有父类的name属性,子类可以直接通过name去访问父类的name


示例二,子类Vip有父类的name属性,子类则需要通过super.name去访问父类的name:

package Day0206.Demo02;public class Customer {String name;public Customer() {}public Customer(String name) {this.name = name;}public static void main(String[] args) {Vip vip = new Vip("张三");vip.shopping();}
}
class Vip extends Customer{String name;public Vip() {}public Vip(String name) {super(name);}public void shopping() {System.out.println(this.name+"正在购物");System.out.println(super.name+"正在购物");System.out.println(name+"正在购物");}}
结果:当子类Vip有父类的name属性,子类则需要通过super.name去访问父类的name,此时的name即this.name值为null。

粗略的内存图如下:

2.子类访问父类的相同方法,与上面的访问同名属性类似

super.父类方法(),在父与子中有相同方法,如果在子类中想访问父类中的方法,必须使用“super.”进行区分!

四、Super关键字总结:

  1. super表示父类的内存地址
  2. super.属性名,访问父类的属性
  3. super.方法名,访问父类的方法
  4. super(实参),调用父类构造方法
  5. super不能用在静态方法
  6. super()只能出现在子类构造方法体的第一行!目的是创建子类对象时,初始化父类型特征
  7. 在父与子中有同名属性或者相同方法,如果在子类中想访问父类中的数据,必须使用“super.”进行区分!

Java 面向对象:super关键字的理解相关推荐

  1. JAVA面向对象-----final关键字

    JAVA面向对象-–final关键字 1:定义静态方法求圆的面积 2:定义静态方法求圆的周长 3:发现方法中有重复的代码,就是PI,圆周率.1:如果需要提高计算精度,就需要修改每个方法中圆周率. 4: ...

  2. Java 面向对象:static的理解

    Java 面向对象:static的理解以及各个代码块的运行顺序 一.static关键字 static修饰方法--称为静态方法,可以直接通过类名调用 static修饰变量--称为静态变量,能被类中所有实 ...

  3. Java 面向对象:多态的理解

    Java 面向对象:多态的理解 一.多态的定义 一个对象的实际类型是确定的,但可以指向引用对象的类型可以有很多(父类,有关系的类) 操作符的多态 +可以作为算数运算,也可以作为字符串连接 类的多态 父 ...

  4. Java 面向对象:重写的理解

    Java 面向对象:重写的理解 一.重写的概念: 子类可以继承父类的对象方法 在继承后,重复提供该方法,就叫做方法的重写,又叫覆盖 override 二.实例: 1. 父类Mi10,提供SOC的打印方 ...

  5. Java中super关键字及super()的使用

    Java中super关键字及super()的使用: 1.super的使用: (1)super是一个关键字. (2)super和this很类似,我们对比着学习. 2.先复习一下this关键字的使用. ( ...

  6. Java中super关键字详解

    Java中super关键字详解 super有什么用? super什么时候不可以省略呢? super在内存图中是如何存在的呢? super使用时的注意事项 super有什么用? (1)当子类中构造方法第 ...

  7. Java中super关键字及其作用

    Java中super关键字及其作用 super关键字及其作用 A:super关键字指代父类对象引用(super代表父类存储空间的标识) B:作用: a:访问被子类隐藏的父类同名成员变量和成员方法 : ...

  8. java面向对象:关键字 —(16)

    static:静态的 1.可以用来修饰的结构:主要用来修饰类的内部结构 属性.方法.代码块.内部类 2.static修饰属性:静态变量(或类变量) 2.1 属性,是否使用static修饰,又分为:静态 ...

  9. JAVA 面向对象的一些基础理解

    方法的定义:方法就是一段可重复调用的代码段 格式: 访问修饰符 返回值类型(可以是void.基本数据类型.引用数据类型) 方法名(){ 方法主体 } 注意:void返回值类型不需要返回值,而其他类型都 ...

最新文章

  1. 哈哈哈,这个教人写出烂代码的项目在 GitHub 上火了...
  2. cmd 将文件夹下文件剪切到另外一个文件_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇...
  3. 【Redis】Redis介绍与Redis3在Window下的安装
  4. 3个常考的SQL数据分析题(含数据和代码)
  5. 读者写者问题详解 操作系统
  6. 西南石油大学计算机科学学院教授,张小洪(计算机科学学院)老师 - 西南石油大学 - 院校大全...
  7. solidity教程(一)搭建僵尸工厂
  8. ROS路径规划(全局路径规划)
  9. matlab求解极限问题(limit函数的用法)
  10. 数列和级数(基本概念)
  11. 华为畅享20plus能更鸿蒙不,甘南收购华为畅享20Plus尾插排线数据线耳机
  12. git 命令带用户名密码
  13. matlab simca,SIMCA软件|SIMCA-多元数据分析软件
  14. 主合同与补充合同的区别有哪些?
  15. python全栈工程师薪水_python全栈+爬虫+自动化+AI=python全能工程师-挑战年薪30W+
  16. python解压rar文件
  17. Ubuntu16.04设置并查看DNS
  18. php跟踪系统调用,使用strace命令跟踪系统调用
  19. Python三角形代码
  20. 月工资计算日薪计算加班公式

热门文章

  1. 权限管理系统如何分别实现对用户和角色的授权
  2. 多台电脑共享一套鼠标键盘的免费方法
  3. [ES6] 细化ES6之 -- 对象的扩展
  4. Linux基础(3)--搭建最小的Linux系统
  5. 7-1 水文数据校验及处理 (50 分)
  6. python 一维数组所有元素是否大于_利用Python进行数据分析(5) NumPy基础: ndarray索引和切片...
  7. 记录一次服务器大中间表优化的问题(数据倾斜的解决)
  8. P3864 [USACO1.2]命名那个数字 Name That Number
  9. Java EE中的重新验证(java.util.regex.Pattern)
  10. 关于Image创建的内存管理