Java三大特性篇之——继承篇(超详解的好吧!)

news2025/1/16 1:41:13

😍😍😍欢迎欢迎欢迎欢迎,我的朋友,答应我,看完好吗?🥴

文章目录

  • 前言:何为继承?
    • 不谈钱的继承实现!
    • 嘘:偷偷访问父类的私密成员!
    • 这是:方法的重写&super关键字!
    • 隐藏起来的小坏蛋——构造函数!
    • final关键字&&貌似结束了
  • 最后:博主想说啥?

前言:何为继承?

在现实生活中,继承一般指的是子女继承父辈的财产。在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物,具体如下图所示。
在这里插入图片描述
当然在猫之后也会有波斯猫、狸花猫等等可以继承猫类;同时也有二哈,卷毛等继承狗类,这些动物之间会形成一个继承体系,这就是我们今天要说的继承问题!
继承是面向对象语法的三大特征之一。继承可以降低代码编写的冗余度,提高编程的效率。通过继承,子类获得了父类的成员变量和方法。那么一个子类如何继承父类的属性和方法呢?我们又该如何修改继承过来的方法呢。更符合我们的需求呢?接下来我们开始学习有关Java继承的相关知识。

不谈钱的继承实现!

在Java中,类的继承是指程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。子类会自动拥有父类所有可继承的属性和方法。在程序中,如果想声明一个类继承另一个类,需要使用extends关键字。

通过 extends 关键字让类与类之间产生继承关系。

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。多个类可以称为子类,单独这个类称为父类或者超类。

说明事项:

  • 子类可以直接访问父类中的非私有的属性和行为。
  • 子类无法直接使用父类中私有的内容。
  • 父类是共性的抽取

eg:

class teacher{             //声明一个teacher类为父类
    String name;      	   //定义父类的成员变量name、age
    int age;
    void show(){           //定义父类成员方法,将成员变量输出
        System.out.println(name);
        System.out.println(age);
    }
}
class Student extends teacher {
    //声明一个Student类为子类并继承父类
}
class show {
    public static void main(String[] args) {
        System.out.println("学生");
        Student student=new Student();     //声明一个Student类的实例对象student
        student.name="Tom";                //子类调用父类的成员变量name并赋值
        student.age=19;                    //子类调用父类的成员变量age并赋值
        student.show();                    //子类调用父类的成员方法show
    }
}


public class text1 {
}

效果如下:
在这里插入图片描述

在Java中,注意事项如下:

  • Java不支持多重继承,但一个类可以实现多个接口,从而克服单继承的缺点;
  • 可以多层继承,即子类也可以作为父类。
  • 子类不能选择性继承父类。
  • 构造方法不会被子类继承,但可以从子类中调用父类的构造方法。

嘘:偷偷访问父类的私密成员!

我们这时候是肯定不能直接访问的,我们需要声明一个公有方法,来帮我们偷偷摸摸的实现(‾◡◝):

class Af{                     //父类A
    private int secret=10;    //声明一个私有变量sevret并赋值为10
    public int getsecret() {  //声明一个公有成员方法getvalue,返回value
        return secret;
    }
}
class Bs extends Af{           //A的子类B
}
class Cc {
    public static void main(String[] args) {
        Bs b=new Bs();           //创建子类B的一个实例对象
        System.out.println("子类通过父类提供的公共接口访问A中的私有字段secret:"+b.getsecret());
    }
}

大功告成:
在这里插入图片描述

这是:方法的重写&super关键字!

子类继承了父类中的所有成员及方法,但在某种情况下,子类中该方法所表示的行为与其父类中该方法所表示的行为不完全相同,例如,在父类语言中定义了说话这个方法,而在子类中说话的方法是不同的:外国人说英文,中国人说中文,这时我们就需要重写父类的该方法
eg:

class A{
    public void sayHello() {                      //输出英文欢迎
        System.out.println("Hello,Welcome to Java!!!");
    } 
}

class B extends A {
    public void sayHello() {                      //输出中文欢迎  
        System.out.println("大家好,欢迎学习Java!!!");
    }
}

class People {
    public static void main(String[] args) {
        B b=new B();                                //创建子类B的一个实例对象,使用默认构造方法
        b.sayHello();                               //调用子类中重写的方法
    }
}

在这里插入图片描述

注意事项

  • 重写的方法具有与其所重写的方法相同的名称、参数数量、类型和返回值。
  • 被重写的方法,其访问权限大于等于被其重写的方法

当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。但同时由于因场景需要或者是其他的一些原因,子类如果要在子类方法中访问父类同名成员时,该如何操作?Java提供了super关键字,该关键字主要作用:在子类方法中访问父类的成员。
具体使用如下:

class A{
    public void sayHello() {                      //输出英文欢迎
        System.out.println("Hello,Welcome to Java!!!");
    }

}
class B extends A {
    public void sayHello() {//输出中文欢迎
        super.sayHello();                        // 调用父类中被重写的方法
        System.out.println("大家好,欢迎学习Java!!!");
    }
}
class People {
    public static void main(String[] args) {
        B b=new B();                                //创建子类B的一个实例对象,使用默认构造方法
        b.sayHello();                               //调用子类中重写的方法
    }
}

在这里插入图片描述

当然,我们的super可不止这一个功能,super相比于this可谓神似,所以也可以使用super来调用父类的构造函数

class C{
    int age ;
    String name;

    public C() {
        System.out.println("这是c的构造方法!");
    }
}

class D extends C{

}

public interface text {
    public static void main(String[] args) {
        D d=new D();
    }
}

结果如下:
在这里插入图片描述

隐藏起来的小坏蛋——构造函数!

我们前面说过,子类不能继承父类的构造函数,然而:子类继承了父类,获取到了父类中属性与方法,所以在使用子类之前,要先看父类是如何对自己的内容进行初始化的。换言之,我们要在使用子类的构造函数之前调用父类的构造函数
如下:

class C{
    int age ;
    String name;

    public C(int age, String name) {
        this.age = age;
        this.name = name;
    }
}

class D extends C{
    //报错!
}

public interface text {
    public static void main(String[] args) {

    }
}

这段代码是无法编译的!!!

用来强大的java会自动给我们的子类生成一个代码段:

public D() {
        super();
    }

可见生成的是父类与子类的无参数构造方法,而我们在父类中定义了一段有参数的构造方法,我们在类和对象中知道,当我们写了构造方法时,就不会再生成一个无参的构造方法!所以这里我们的super()找不到对于方法,只能报错!因此,我们可以如下修改:

class C{
    int age ;
    String name;

    public C(int age, String name) {
        this.age = age;
        this.name = name;
    }
}

class D extends C{
    public D(int age, String name) {
        super(age, name);                         //不在报错!
    }
}

public interface text {
    public static void main(String[] args) {

    }
}

注意事项:

  • 当父类中没有空参数的构造函数时,子类的构造函数必须通过super语句指定要访问的构造函数。

  • 子类构造函数中如果使用this调用了本类构造函数,那么默认的super();就没有了,因为super和this都只能定义在第一行,所以只能有一个。但是可以保证的是,子类中肯定会有其他的构造函数访问父类的构造函数。

  • super语句必须要定义在子类构造函数的第一行!因为父类的初始化动作要先完成。

final关键字&&貌似结束了

inal关键字可用于修饰类、变量和方法,它有“**无法改变”或者“最终”**的含义,因此被final修饰的类、变量和方法将具有以下特性:

  • final修饰的类不可以被继承

  • final修饰的方法不可以被覆盖

  • final修饰的变量是一个常量,只能被赋值一次且必须直接赋值

那么 为什么要用final修饰变量?其实,在程序中如果一个数据是固定的。那么直接使用这个数据就可以了,但是这种阅读性差,所以应该给数据起个名称。而且这个变量名称的值不能变化,所以加上final固定!

final int a = 10;
a = 20; // 编译出错

final public class Animal {
...
}
public class Bird extends Animal {
...
}
// 编译出错

最后:博主想说啥?

好了,有关Java继承的知识讲到这里了,谢谢观看!!!如果文章有问题,还请大家指出,我们一起进步!

我们下篇文章再见!!!

博主相信:成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。 朋友们,我们顶峰相见!

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

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

相关文章

OkHttp相关知识(二)

okhttp中一次网络请求的大致过程: Call对象对请求的封装 dispatcher对请求的分发 getResponseWithInterceptors()方法 一、OkHttp同步方法总结: 创建OkHttpClient和构建了携带请求信息的Request对象将Request封装成Call对象调用Call的execute()发送…

【11.16】Codeforces 刷题

DP\text{DP}DP :(今天做的这两道都没啥 DP 相关来着 D. Match & Catch 题意: 给定两个字符串 1≤∣s1∣,∣s2∣≤50001\leq |s_1|,|s_2|\leq 50001≤∣s1​∣,∣s2​∣≤5000 ,求最短的满足各只出现一次的连续公共字串。 思…

实验27:红外遥控三级控速风扇实验

今天介绍一个稍微复杂点的实验,复杂在设计和代码 ——OK,受了抖音西湖大学教授刺激,任何人都可以做研究 ——实验:红外遥控三级风速小电扇 ——每按一下CH-,风速从1-2-3-1-2-3-1循环 ——按下CH+,风扇停止 ——没有背景音乐目的是听风扇声音大小判断风速 OK实验介绍完了…

五个可以永远相信的神仙网站推荐

早八的我们是不是偶尔会处在焦虑中呢?一方面年轻人工作压力大,另一方面我们偶尔会感慨我们的碌碌无为,不知道怎样提升自己。今天为大家推荐五个焦虑时可以随手打开看,不知不觉悄悄提升自己的软件。 1.全历史 全历史是一个把历史以…

《元宇宙2086》亮相金鸡奖中国首部元宇宙概念院线电影启动

2022年中国金鸡百花电影节暨第35届中国电影金鸡奖于11月10日至12日在福建厦门举办,中国动漫集团控股子公司北京中文发文化发展有限公司与《元宇宙2086》作者高泽龙在金鸡奖创投论坛正式签约,宣布将共同启动筹拍中国首部元宇宙概念的院线电影。 当日下午&…

如何在Docker中安装MySQL数据库

1、Docker环境 视频教程:https://www.bilibili.com/video/BV1xv4y1S7kA 2、搜索镜像 https://hub.docker.com/网站搜索MySQL,确定其安装版本,这里安装8.0.31版; 3、拉取镜像 [rootlocalhost ~]# docker pull mysql:8.0.31 8.…

市级专精特新的申报条件

一、基本条件:(各市政策不同具体情况也不同,下面为济南市企业的申报条件) 1、连续经营3年以上,上年度企业营业收入在800万元以上; 2、近两年营业收入复合增长率不低于8%(2021年参照国 家级调…

Nginx 反向代理

title: Nginx 反向代理 date: 2022-11-16 10:24 tags: [Nginx,反向代理,正向代理,代理] 文章目录〇、问题一、前言二、正向代理&反向代理2.1 正向代理2.2 反向代理三、Nginx配置反向代理参考更新〇、问题 什么是正向代理?什么是反向代理?Nginx如何配…

Mysql之视图、索引【第五篇】

大纲: 一、视图 1、什么是视图? 1) MySQL 视图(View)是一种虚拟的表,是从数据库中一个或多个表中导出来的表。视图由列和行构成,行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。 …

【蓝桥杯物联网赛项学习日志】Day3 关于IIC

经过昨天的学习,已经了解和初步学会配置CubeMax进行初始化配置。今天就开始下一章节的学习,关于IIC。 关键词:I2C OLED SSD1306 理论基础 串行通信接口通讯方式分,可以分为两种,分别是同步和异步。按照数据的传输方…

组成目标货币的最少张数

1、题目 arr 是货币数组,其中的值都是正数。再给定一个正数 aim。 每个值都认为是一张货币,返回组成 aim 的最少张数。 注意:因为是求张数,所以每张货币认为是相同或不同就不重要了。 2、思路 假设 arr [3,1&…

GD32F450的时钟笔记

GD32F450 标称 200MHz,但是在手册中又说 它是 240MHz。本文以 手册中的 240MHz 进行举例,我保险起见,产品中使用还是在 200MHz 下使用。 时钟树 手册上的时钟树图如下 GD32F450的 外部时钟源 有2个 LXTAL 外部低速时钟源 32.768 kHzHXTAL …

微信小程序登录获取不到头像和昵称解决办法!

微信小程序登录获取不到头像和昵称主要原因是:小程序wx.getUserProfile接口被收回! 大家可以按照文档操作↓ PS: 针对小程序wx.getUserProfile接口将被收回后做出的授权调整 小程序文档中提出的调整说明 对于此次变化,现将小…

怎么使用股票委托下单接口?

都知道,在进行量化交易的时候,交易接口可以100%严格按照定制的计划执行交易,避免了出现下单犹豫和过量交易等问题,100%体现交易策略的收益性;今天主要来聊聊,关于怎么使用股票委托下单接口的问题&#xff1…

使用c#将aj-report桌面化1

说到底,aj-report是个工具,我想大多数人还是想快速使用它来创建一个可以展示的工具。通过之前的章节,你应该可以制作自己的报表页面了,下面我们来看看怎么把aj-report包装成一个桌面能够运行的软件。 当然作为扩展开发,受开源协议限制,我们不能大规模修改aj-report的源代…

[附源码]java毕业设计基于新高考模式下的排课系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

程序员“中年危机”?不,也可能是“人生转机”

程序员行业新技术发展迅猛,可以说是日新月异。也正是这个原因,中年危机成为我们必须面对和攻克的问题。 思考一个问题:那些能工作到45、50、甚至60的程序员们,究竟具备了哪些过人的能力? 就我过去的经历和观察来说&a…

【蓝桥杯真题练习】STEMA科技素养练习题库 答案版015 持续更新中~

1、牛顿运动定律描述了物体运动符合的规律,被誉为经典力学的基石。以下关于牛顿定律的描述中,不正确的选项是( )。 A、牛顿运动定律一共有三条 B根据牛顿定律,没有受到外力作用的物体运动速度会保持不变 C根据牛顿运动定律,两个物体作用于对方的力大小一定相等 D牛…

项目运营后阶段发力

前言 我记得之前有人跑过来问我:你知道为啥字节面试总会考算法吗?我没有回答,一方面是算法是大厂必考的东西,既然是必须的东西究竟个为什么有点白费心机,第二方面我没有进去过字节,所以我也拿捏不准为什么。…

业务数据分析-Excel的基础操作(一)

Excel的基础操作1、工作簿2、工作表3、数据基本操作4、数据类型5、常用快捷键1、工作簿 即Excel文档,用来储存和处理数据的文件 常用扩展名: xls 97-03版xlsx 07版以后xlsm 带宏的文件 一个工作簿包含多张工作表 2、工作表 默认名称:shee…