【Java继承】(超级详细!!!)

【Java继承】(超级详细!!!)

  • 1、 继承的概念
  • 2 、继承的语法
  • 3、 父类成员访问
    • 3.1 子类中访问父类的成员变量
    • 3.2 子类中访问父类的成员方法
  • 4、 super关键字
  • 5 、子类的构造方法
  • 6、 继承关系上的执行顺序
  • 7、protected 关键字
  • 8、继承方式
  • 9、final 关键词

1、 继承的概念

继承机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用

例如:小猫和小狗都是(有名字有年龄要吃饭)的动物。

在这里插入图片描述
上述图示中,Dog和Cat都继承了Animal类。
其中:Animal类称为父类/基类或超类,Dog和Cat可以称为Animal的子类/派生类。
继承之后,子类可以复用父类中成员,子类在实现时只需关心自己新增加的成员即可。

下面我们将学习继承的语法,利用代码实现上述继承关系!

2 、继承的语法

修饰符 class 子类名 extend 父类名(){//...
}

在这里插入图片描述

注意:

  • 子类会将父类中的成员变量或者成员方法继承到子类中
  • 子类继承父类之后,必须要新添加自己特有的成员,体现出与基类的不同,否则就没有必要继承了

3、 父类成员访问

3.1 子类中访问父类的成员变量

在这里插入图片描述

  • 如上图a所示:当子类和父类中同时有成员变量a时,访问的是子类的成员变量a
  • 如上图b所示:当子类没有成员变量b,而父类有成员变量b时,访问的是父类的成员变量b
  • 如上图c所示:当子类有成员变量c,父类没有成员变量c时,访问的是子类的成员变量c

注意:
成员变量访问遵循就近原则,自己有优先自己的,如果没有则向父类中找。

3.2 子类中访问父类的成员方法

在这里插入图片描述

  • 如上图test1所示:子类中没有成员方法test1,父类中有成员方法test1,所以访问的是父类中的成员方法test1
  • 如上图test2所示:子类中有成员方法test2,父类中没有成员方法test2,所以访问的是子类中的成员方法test2
  • 如上图test所示:子类和父类都有成员方法test,同样遵循就近原则,访问的是子类的成员方法test

下面我们进行一个小测试,从而使我们更深入的了解该知识点。

//父类
public class Father {int a=1;int b=1;public void test1(int a){System.out.println("父类test1,数字结果为:"+a);}public void test1(){System.out.println("父类test1,无参数");}}
//子类
public class Son extends Father{int a=2;int c=2;public void test1(){System.out.println("子类test1,无参数");}public void func(){test1();test1(a+c);test1(b+c);}
}
//主函数
public class Main {public static void main(String[] args) {Son son=new Son();son.func();}
}

打印结果:
子类test1,无参数
父类test1,数字结果为:4
父类test1,数字结果为:3

4、 super关键字

通过上述知识我们知道:当子类和父类中存在相同名称的成员时,访问子类的成员。
那么,,如果要在子类方法中访问父类同名成员时,该如何操作?
此时便需要用到关键词super

这里是引用

  • super只能在非静态方法中使用
  • 在子类方法中访问父类的成员变量和方法

super的用法远不止这些,super的其他方法会在下文中提到。

5 、子类的构造方法

这里是引用

  • 若父类显式定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用,即调用基类构造方法
  • 如果父类构造方法是带有参数的,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的父类构造方法调用,否则编译失败。
  • 在子类构造方法中,super(…)调用父类构造时,必须是子类构造函数中第一条语句。
  • super(…)只能在子类构造方法中出现一次,并且不能和this同时出现

6、 继承关系上的执行顺序

//父类
public class Father1 {int a;int b;//构造方法public Father1(int a, int b) {this.a = a;this.b = b;System.out.println("父类,构造方法");}{System.out.println("父类,实例方法");}static {System.out.println("父类,静态方法");}
}
//子类
public class Son extends Father1 {public Son(int a, int b) {super(a, b);System.out.println("子类,构造方法");}{System.out.println("子类,实例方法");}static {System.out.println("子类,静态方法");}
}
//主方法
public class Main {public static void main(String[] args) {Son son=new Son(1,2);System.out.println("=============");Son son1=new Son(1,2);}
}

打印结果:
父类,静态方法
子类,静态方法
父类,实例方法
父类,构造方法
子类,实例方法
子类,构造方法
=============
父类,实例方法
父类,构造方法
子类,实例方法
子类,构造方法

由上述代码可以得出结论:

  • 首先依次执行父子类的静态方法
  • 接着依次进行父类的实例方法和构造方法
  • 最后依次进行子类的实例方法和构造方法
  • 静态方法只执行一次

7、protected 关键字

在这里插入图片描述

1.同一包中的同一类
在这里插入图片描述

2.同一包的不同类
在这里插入图片描述

3.不同包中的子类
在这里插入图片描述

4.不同包中的非子类
在这里插入图片描述

8、继承方式

在这里插入图片描述

注意:Java不能实现多继承!!!

9、final 关键词

1.final 修饰变量或字段
在这里插入图片描述
2.final 修饰类
在这里插入图片描述
3.final 修饰方法
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/17166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu20.04安装后配置:wifi、屏幕亮度、Nvidia驱动等

文章目录 一、安装时最好用英语,否则Downloads等home下文件夹是中文二、安装后开机无法进入系统图形界面三、清理不必要软件,更新系统四、屏幕亮度、Nvidia驱动五、wifi 一、安装时最好用英语,否则Downloads等home下文件夹是中文 安装完再在…

error: ‘address‘ in ‘class school‘ does not name a type school:: address = “

错误代码 class school{ public:string name;static string address; public:static string getAddress(){return address;} };school::address "南京路";原因 school::address “南京路”;前面未加类型,导致编译错误 解决 class school{ public:stri…

选项卡式小部件QTabWidget

文章目录 1. 详细介绍2. 常用属性3. 信号4. 常用函数5. 官方示例Tab Dialog QTabWidget提供一堆选项卡式小部件。 1. 详细介绍 选项卡式部件提供一个选项卡栏和一个用于显示与每个选项卡相关的页面的页面区域。 默认情况下,选项卡栏显示在页面区域上方,…

Vue.js - 计算属性与侦听器 【0基础向 Vue 基础学习】

文章目录 计算属性 computedcomputed 的使用方法computed 与 method 的区别计算属性完整写法 watch 侦听器(监视器)简单写法 → 简单类型数据,直接监视完整写法 → 添加额外配置项 计算属性 computed computed 的使用方法 **概念&#xff1…

web题解,基础知识巩固(qsnctf)

1.文章管理系统 1)打开题目,把它页面翻完了,没看懂它有啥用 2)看了看源码,也是一样的,没找到有用的东西 3)想着可能还是在隐藏文件里找,那我就直接用dirsearch扫扫看 4)…

初识C++ · 模拟实现vector

目录 前言: 1 部分简单函数的实现 2 push_back和pop_back 3 reserve和resize 4 Print_vector 5 insert和erase 6 拷贝构造 7 构造 8 赋值 9 memcpy的问题 10 迭代器失效 前言: 继上文模拟实现了string之后,接着就模拟实现vector&…

DataFrame—数据汇总9

s3.sort_index() 文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣&#xf…

MyBatis复习笔记

3.Mybatis复习 3.1 xml配置 properties&#xff1a;加载配置文件 settings&#xff1a;设置驼峰映射 <settings><setting name"mapUnderscoreToCamelCase" value"true"/> </settings>typeAliases&#xff1a;类型别名设置 #这样在映射…

如何去除视频上的文字?免费无痕去水印分享!视频制作良器!

对于需要进行二次创作的视频素材&#xff0c;去除原有的文字可以提供一个更加干净的画布&#xff0c;方便创作者在其基础上进行新的创作和编辑。同时&#xff0c;去除文字后的视频也更方便分享到各种平台&#xff0c;避免因为平台对文字的限制而导致视频无法发布或传播。 要去除…

Kotlin 标准函数 with、run、apply 的定义和使用

Kotlin 标准函数 with、run、apply 的定义和使用 1. with 函数 定义&#xff1a; with 函数允许你在一个对象的上下文中执行一个 lambda 表达式&#xff0c;而不需要在 lambda 表达式中重复引用该对象。 kotlin.internal.InlineOnly public inline fun <T, R> with(r…

云计算期末复习(1)

云计算基础 作业&#xff08;问答题&#xff09; &#xff08;1&#xff09;总结云计算的特点。 透明的云端计算服务 “无限”多的计算资源&#xff0c;提供强大的计算能力 按需分配&#xff0c;弹性伸缩&#xff0c;取用方便&#xff0c;成本低廉资源共享&#xff0c;降低企…

python 3.10 install on centos

CentOS 7 安装 Python 3.10_yum python3.10-CSDN博客

Homebrew安装mysql之后,启动和使用MySQL服务:

启动MySQL服务&#xff1a; brew services start mysql 手动启动服务&#xff1a; mysql.server start 例如&#xff1a; mysql.server start Starting MySQL .. SUCCESS! 停止 MySQL服务&#xff1a; brew services stop mysql 或者 mysql.server stop 重启MySQL服务&a…

IDEA使用Maven打包项目的所有的依赖

要使用 Maven 命令将 Spring Boot 项目的依赖打包到 lib 文件夹中&#xff0c;你可以在终端中运行以下命令&#xff1a; mvn dependency:copy-dependencies -DoutputDirectory./lib这个命令会将项目的所有依赖&#xff08;包括运行时依赖&#xff09;复制到当前目录的 lib 文件…

Windows操作系统基本知识整理

目录 引言 一、Windows操作系统的发展历史 1.1 Windows 1.0到Windows 3.0 1.2 Windows 95到Windows Me 1.3 Windows NT到Windows 2000 1.4 Windows XP到Windows 7 1.5 Windows 8到Windows 10 二、Windows操作系统的核心组件 2.1 内核 2.2 文件系统 2.3 图形用户界面&…

内网横向移动小补充 --->PTK

大家别急&#xff0c;我的基于资源的约束性委派攻击还在写&#xff0c;这个东西一时半会讲不清楚&#xff0c;所以我在这里先来补充一点横向移动以前没说好的东西&#xff01;&#xff01;&#xff01; 在更啦&#xff0c;别催啦~~~~ 还记得我之前在内网渗透里面讲过这个PTK&a…

亚马逊云主管马特·加尔曼面临压力,致力于在人工智能领域赶超竞争对手

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

mysql中连接查询的成本

大家好。上篇文章我们讲了mysql中成本的含义以及单表查询如何计算成本。现在我们接着讲讲mysql中连接查询的成本。 在讲之前&#xff0c;我们先创建两张一样的表single_table和single_table2&#xff0c;并在表中插入10000条数据。在下面的讲解中&#xff0c;我们称single_tab…

java并发工具类都有哪些

Java中的并发工具类包括&#xff1a; CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成某些操作。它通常用于线程间的同步&#xff0c;例如在一个线程完成其工作后通知其他线程继续执行。 CyclicBarrier CyclicBarrier是一个同步辅助类&#xff0c;它允许一…

使用@Transactional 注解下,事务失效的场景

前言 Transactional是一种基于注解管理事务的方式&#xff0c;spring通过动态代理的方式为目标方法实现事务管理的增强。 Transactional使用起来方便&#xff0c;但也需要注意引起Transactional失效的场景&#xff0c;本文总结了七种情况&#xff0c;下面进行逐一分析。 一、…