【Java入门合集】第四章继承(一)

news2024/9/28 15:19:29

【Java入门合集】第四章继承(一)


博主:命运之光
专栏:JAVA入门

学习目标
1.掌握继承性的主要作用、实现、使用限制;
2.掌握this和super的含义及其用法;
3.掌握方法覆写的操作;
4.掌握final关键字的使用;
5.掌握类变量、实例变量和局部变量的含义和用法;
6.掌握static和final修饰符的作用;

85df6857d41e352e3ca1320d0e8abeb(1).png


Java中的继承

继承的概念

继承是面向对象的第二大主要特征,而继承性要解决的就是代码重用的问题,利用继承性可以从已有的类继续派生出新的子类,也可以利用子类扩展出更多的操作功能

  • 通过扩展一个类来建立另外一个类的过程,叫做继承(inheritance)
  • 通俗地说,所谓继承,就是让类与类之间产生父子关系
  • 继承的语法如下:
[类修饰符]    class  子类名  extends  父类名 {
    // ...
}

extends: 表示扩展,继承的意思。(子类自动拥有了父类的变量和方法)

子类也称为 派生类,父类也称为基类或超类

继承的使用场景

代码复用:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可,实现代码复用。
🍓🍓例1: 继承的基本实现

import sun.awt.windows.WPrinterJob;
class Person {
    private String name;
    private int age;
    public int getAge() {
        return age;
    }
    public String getName() {
        return name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void setName(String name) {
        this.name = name;
    }
}
class Student extends Person { 	// Student类继承了Person类
    // 此类没有定义任何的操作方法
}
public class text1 {
    public static void main(String args[]) {
        Student st = new Student(); 	// 实例化的是子类子类继承父类后,即使不扩充父类,也属于维持功能的状态
        st.setName("张三"); 	// Person类定义
        st.setAge(20); 		// Person类定义
        System.out.println("姓名:" + st.getName() + ",年龄:" + st.getAge());
    }
}

image.png
子类扩展父类的功能:当父类表示的范围大,而子类表示的范围小,这时,子类扩展父类的属性或方法,也可以理解为子类实际上是将父类定义的更加具体化的一种手段。
🍓🍓例2: 在子类中扩充方法。

import sun.awt.windows.WPrinterJob;
class Person {
    private String name;
    private int age;
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
}
class Student extends Person { 			// Student类继承了Person类
    private String school ;		// 子类扩充的属性
    public void setSchool(String school) {
        this.school = school;
    }
    public String getSchool() {
        return school;
    }
}
public class text1 {
    public static void main(String args[]) {
        Student stu = new Student(); 	// 实例化的是子类
        stu.setName("张三"); 	// Person类定义
        stu.setAge(20); 		// Person类定义
        stu.setSchool("清华大学") ;	 	// Student类扩充方法
        System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge()
                + ",学校:" + stu.getSchool());
    }
}

image.png

  • 在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法;
  • 子类只能继承父类的非私有(private)属性,但可以通过继承过来的get、set方法来访问父类中定义的私有属性变量。

继承的作用

  1. 继承的出现减少了代码冗余,提高了代码的复用性。
  2. 继承的出现,更有利于功能的扩展。
  3. 继承的出现让类与类之间产生了关系,提供了多态的前提。

注意:不要仅为了获取其他类中某个功能而去继承;

继承的限制

  • Java只支持单继承多层继承(一个子类只能有一个父类,一个父类可以派生出多个子类)
  • 子类在继承父类的时候严格来讲会继承父类中的全部操作,但是对于所有的私有操作属于隐式继承(通过getter,setter方法),而所有的非私有操作属于显式继承
import sun.awt.windows.WPrinterJob;
class A {
    private String msg;
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public String getMsg() {
        return this.msg;
    }
}
class B extends A {}		// 继承自A类
public class text1{
    public static void main(String args[]) {
        B b = new B();
        b.setMsg("Hello");	// 设置msg属性,属性通过A类继承
        System.out.println(b.getMsg());	// 通过子类对象取得msg属性
    }
}

image.png

  • 在子类对象构造之前一定会默认调用父类的构造(默认使用无参构造),以保证父类的对象先实例化,而后再实例化子类对象。
import sun.awt.windows.WPrinterJob;
class A {
    public A() {		// 父类提供的无参构造方法
        System.out.println("A、A类的构造方法!");
    }
}
class B extends A {	// B是子类继承父类A
    public B() {			// 定义子类的构造方法
        System.out.println("B、B类的构造方法!");
    }
}
public class text1 {
    public static void main(String args[]) {
        B  b = new B();		 // 实例化子类对象
    }
}

image.png
在这里插入图片描述

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

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

相关文章

Linux——进程信号

进程信号 信号的基础生活中技术上 信号的产生信号捕捉接口信号发送接口向任意进程发送信号向自己发送信号 进程退出时——核心转储 信号的保存信号其它相关概念信号如何实现捕捉的 信号的处理sigset_t信号集操作函数sigprocmasksigpending对于信号保存更深入的理解sigaction 可…

JavaWeb ( 八 ) 过滤器与监听器

2.6.过滤器 Filter Filter过滤器能够对匹配的请求到达目标之前或返回响应之后增加一些处理代码 常用来做 全局转码 ,session有效性判断 2.6.1.过滤器声明 在 web.xml 中声明Filter的匹配过滤特征及对应的类路径 , 3.0版本后可以在类上使用 WebFilter 注解来声明 filter-cla…

JVM 类加载子系统

内存结构概述 粗略图: 详细图: 类加载器与类的加载过程 类加载子系统负责从文件系统或者网络中加载 Class 文件, class 文件在文件开头有特定的文件标识ClassLoader 只负责 class 文件的加载,至于它是否可以运行, 则由 Execution Engine 决定加载的类信…

AI读心重磅突破登Nature!大脑信号1秒被看穿,还能预测未来画面

夕小瑶科技说 分享 来源 | 新智元 最近,来自洛桑联邦理工学院的研究团队提出了一种全新的方法,可以用AI从大脑信号中提取视频画面。论文已登Nature,却遭网友疯狂「打假」。 现在,AI不仅会读脑,还会预测下一个画面了&a…

实验十九、利用运算电路解方程

一、题目 研究利用运算电路解方程。已知一元二次方程为 2 X 2 X − 6 0 2X^2X-60 2X2X−60,试求其解。 二、仿真电路 按方程式搭建电路,如图1所示。该电路为加减运算电路,由于同相和反相端电阻参数对称,故省略掉了同相输入端…

2.docker—数据卷操作

文章目录 1、配置数据卷2、数据卷容器3、小结 1、配置数据卷 挂载 # 创建启动容器时,使用 –v 参数 设置数据卷 sudo docker run ... –v 宿主机目录(文件):容器内目录(文件) ...sudo docker run -it --namec1 -v /home/sjj/data:/root/data_container centos:7 /…

【C++进阶之路】类和对象(中)

文章目录 前言六大默认成员函数 一.构造函数性质默认构造函数构造函数(需要传参) 二.析构函数性质默认析构函数练习 三.拷贝构造函数基本性质:形参必须是引用默认拷贝构造浅拷贝深拷贝自定义类型 四.赋值运算符重载函数基本特征全局的运算符重载函数局部的运算符重载…

深入学习 Kotlin 枚举的进阶用法:简洁又高效~

翻译自:https://towardsdev.com/mastering-enums-in-kotlin-a-guide-to-simplify-your-code-130b5934cb16 Kotlin 作为现代的、强大的编程语言,可以给开发者提供诸多特性和工具,得以帮助我们编写更加高效、更具可读性的代码。 其中一个重要的…

开源工具系列7:Kube-bench

导语 Kube-Bench 是一个基于Go开发的应用程序,属于 Kubernete 的安全检测的工具。它可以帮助研究人员对部署的 Kubernete 进行安全检测。 Kube-Bench 是什么 从本质上来说,Kube-Bench 是一个基于Go开发的应用程序,属于 Kubernete 的安全检…

免费版的mp3格式转换器有哪些?这三款软件帮你实现!

在娱乐文化越来越丰富的今天,人们越来越追求音乐、视频等娱乐方式,其中音乐作为一种能够治愈心灵的艺术形式备受欢迎。但要欣赏一首美妙的音乐,就需要我们自己去制作、编辑并转换其格式,以适应各种软件如MP3、MP4等格式。 方法一…

在 Python 中将 Tqdm 与 Asyncio 结合使用

动动发财的小手,点个赞吧! 简介 困扰 在 Python 中使用并发编程来提高效率对于数据科学家来说并不罕见。在后台观察各种子进程或并发线程以保持我的计算或 IO 绑定任务的顺序总是令人满意的。 但是还有一点困扰我的是,当我在后台并发处理成百…

数据结构篇五:队列

文章目录 前言1.队列1.1 队列的概念及结构1.2 队列的实现 2. 各功能的解析及实现2.1 队列的创建2.2 初始化队列2.3 队尾入队列2.4 队头出队列2.5 获取队头元素2.6 获取队尾元素2.7 队列中有效元素个数2.8 检查队列是否为空2.9 销毁队列 3.代码实现3.1 Queue.h3.2 Queue.c3.3 te…

JavaWeb ( 七 ) JSTL Tag标签

2.5.JSTL标签与EL表达式 2.5.1.EL表达式 EL表达式 : Expression Language 目的:为了使JSP写起来更加简单 格式:${expression} EL 提供“.“和“[ ]“两种运算符来存取数据。${user.name}, ${user[“name”] }支持算术操作符, 关系操作符, 逻辑操作符…

Python:Python进阶:内存管理机制

Python内存管理机制 1. 堆2. 栈3. 引用4. Python中可变对象和不可变对象有个问题:你可以好好思考下总结 Python内存管理程序是用 C/C写的,这里我们以 CPython解释器为例说明。 在Python 中 所有数据类型 包括:int dict str都是一个对象&#…

层次分析法及找工作问题实战

学习知识要实时简单回顾,我把学习的层次分析法简单梳理一下,方便入门与复习。 AHP 层次分析法(Analytic Hierarchy Process,简称 AHP)是对一些较为复杂、较为模糊的问题作出决策的简易方法,它特别适用于那…

C++类和对象上

专栏:C/C 个人主页:HaiFan. 专栏简介:本章为大家带来C类和对象相关内容。 类和对象 前言面向过程和面向对象类的引入类的定义对于类中成员的命名建议 类的访问限定符及封装访问限定符封装 类的作用域类的实例化如何计算类对象的大小this指针t…

Web自动化测试——XAPTH高级定位

XAPTH高级定位 一、xpath 基本概念二、xpath 使用场景三、xpath 相对定位的优点四、xpath 定位的调试方法五、xpath 基础语法(包含关系)六、xpath 顺序关系(索引)七、xpath 高级用法1、[last()]: 选取最后一个2、[属性名属性值 an…

ESP32设备驱动-PCF8575IO扩展器驱动

PCF8575IO扩展器驱动 文章目录 PCF8575IO扩展器驱动1、PCF8575介绍2、硬件准备3、软件准备4、驱动实现1、PCF8575介绍 PCF8575用于两线双向总线 (I2C) 的 16 位 I/O 扩展器专为 2.5-V 至 5.5-V VCC 操作而设计。 PCF8575 器件通过 I2C 接口 [串行时钟 (SCL)、串行数据 (SDA)]…

flask教程8:模板

文章目录 一、模板与自定义过滤器1 模板2 过滤器转义过滤器讲解 3自定义过滤器 二、表单1表单2表单扩展 三、创建表单模型类与模板使用3.1 表单模型类 四 、使用表单接受并检验参数五、模板宏的使用六 、宏定义在外部的使用七 :模板继承与包含继承包含include 八 、…

PVE 安装 windows10

pve 安装教程大家可以参考视频:pve 安装 pve 安装 Windows10 视频教程:pve 安装Windows10 在安装好 pve 后我们就可以进行虚拟机的安装了。当然我们可以自行决定是否有必要进行 win10 的安装。 准备工作 1. 下载 win10 镜像文件:https://…