首页 > 编程语言 >Java 继承、super() 关键字使用、super 和 this的区别

Java 继承、super() 关键字使用、super 和 this的区别

时间:2023-07-12 23:13:48浏览次数:38  
标签:调用 Java 继承 子类 构造 关键字 父类 super

Java 继承、super() 关键字使用、super 和 this的区别

1. 继承

继承是子类使用 extends 关键字来继承父类获取相同的属性和方法,可以解决代码的复用性问题

继承的基本思想:父类的构造器进行父类初始化,子类的构造器进行子类的初始化

继承使用细节:

子类在使用父类的方法或属性时,不能直接访问使用 private 私有修饰符修饰的属性或方法,可以通过公共的方法来间接获取

子类的无参构造器会默认调用 super() 方法来调用父类的无参构造器,若父类没有无参构造器,子类需要手动调用父类的其他构造器

子类在使用 super() 或 this() 使用父类或本类的构造器,则需要放到构造器的第一行,并且 super() 和 this() 只能有一个,super() 默认在每个子类的构造器都会生成,不管写没写,系统自动会调用 super() 方法

Object 是所有类的父类,父类的调用不局限直接父类,将一直追溯到 最顶级的 Object 类

子类最多只能继承一个父类,如果想要多继承的话,则需要间接继承,即继承父类,父类继承其父类

继承必须满足 is-a 的逻辑关系,不能滥用继承

子类继承后使用属性的时候层次递增,先寻本类是否有此属性,若没有则向父类依次往后寻找,若期间碰到了私有属性则不能继续访问其他属性,如果需要访问私有属性,只能让此类提供公共方法让子类调用方法来访问

2. super 关键字

super 可以理解为对父类的引用,通过 "." 来获取父类的非私有的属性或方法

super 可以访问父类的构造器

子类继承父类需要调用父类方法时,当方法名都相同时,通过 super. 语法可以直接调用,这和直接或用this调用方法不同,后者当中这两个方式可以等价为一个方式,因为 this 和直接调用都是在本类当中开始寻找,之后依次递增到父类当中调用方法。如果方法名都不重名,则这 3 种方式都可以调用

super 不仅仅访问直接父类,若父类的上面还有相同的方法名则就近选择,继承的本质就是建立查找关系。

3. this 与 super 的区别

this 在调用方法或使用属性的时候都默认先从本类当中寻找是否存在,若不存在则从父级开始就近寻找。而 super 在调用方法或使用属性的时候直接从其父类开始寻找

this 在创建构造器当中使用时,必须调用本类的构造器。而 super 则调用父类构造器,这两种方式都需要放在构造器的第一行且只能有一个。

在一些特殊的含义时候,this 还可以认为是本类的对象,而 super 则是子类对父类访问的对象。

标签:调用,Java,继承,子类,构造,关键字,父类,super
From: https://www.cnblogs.com/Sean-y/p/17549126.html

相关文章

  • Java 封装
    Java封装1.封装封装就是把抽象的数据和方法进行封装,数据在内部通过授权的方法来进行数据的操作,例如遥控器通过按钮对电视机的操作。封装的好处:隐藏实现细节校验并保护数据的安全封装的三步骤:对属性进行私有化设置公共的set方法设置该属性,可在内部进行业务逻辑判断......
  • Java关于方法的一些总结
    方法的一些总结1、方法的定义方法包含一个方法头和一个方法体。下面是一个方法的所有部分:修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有......
  • Java面试题全集(一)
    JDK、JRE、JVM之间的区别JDK(JavaSEDevelopmentKit),Java标准开发包,它提供了编译、运⾏Java程序所需的各种⼯具和资源,包括Java编译器、Java运⾏时环境,以及常⽤的Java类库等JRE(JavaRuntimeEnvironment),Java运⾏环境,⽤于运⾏Java的字节码⽂件。JRE中包括了JVM以及JVM⼯作......
  • Java学习day02:流程控制1
    我在B站上大学......
  • 如何掌握JavaScript面向对象开发相关模式?
    本文学习目标:理解面向对象开发思想掌握JavaSciprt面向对象开发模式不管是JavaScript高级还是针对JavaScript语言本身的一个进阶学习,在开始之前我们先来对JavaScript相关知识点做一个回顾总结。一、JavaScript是什么1.1解析执行:轻量级解释型的语言特点:动态、头等函数(First-classFu......
  • Java面试高频技术线程池,源码笔记答案全纪录
    有一定的java基础(线程),尤其是正要或正准备找工作的童鞋如果想在众多面试者中脱颖而出,你就需要多准备一些知识点,多刷一些面试题。而对于企业而言,有这么多的选择那我们就提高面试门槛,可能我需要的仅仅是CRUD的初中级,但我也希望你能了解JVM、多线程、Spring源码、Sql优化、分布......
  • Java TreeMap 介绍与使用
    介绍TreeMap是Java集合框架中的一个类,它实现了SortedMap接口,可以存储键值对,并按照键的自然顺序或者指定的比较器进行排序。TreeMap的底层是一棵红黑树,这是一种自平衡的二叉搜索树,可以保证在插入,删除,查找等操作中的时间复杂度为O(logn)。使用要使用TreeMap,我们需要导入......
  • 你知道Java是世界第一的秘密吗?
    说Java你会说他就是一个计算机语言吧,对它并不是很了解。看完下面的文字,你肯定就不会说你对Java不了解了。Java从1995年诞生到现在已经21年了,他的辉煌你知道吗?Java一直在改变你的生活!傲居语言排行榜榜首Java在TIOBE上的位置TIOBE编程语言社区排行榜是编程语言流行趋势的一个指标,每......
  • JAVA 数字类型 的使用和选择
    JAVA语言中有八种基本的数字类型,分别是byte、short、int、long、float、double、char和boolean。这些类型的区别在于它们所占用的内存空间和表示的范围不同。在使用和选择数字类型时,需要考虑以下几个因素:数字的大小:如果数字很小,可以使用byte或short类型,它们占用1个字......
  • JMeter脚本报错:Cannot find engine named: 'javascript'的解决方法
    本文将介绍如何解决在JMeter版本5.4.1下执行脚本时出现的错误信息“javax.script.ScriptException:Cannotfindenginenamed:'javascript'”。通过将本地JDK版本从18.0.1.1更改为1.8.0_151来解决此问题。当使用JMeter进行脚本执行时,有时可能会遇到以下错误信息:javax.script......