【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 修饰方法
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初学C语言100题:经典例题节选(源码分享)

1.打印Hello World! #include <stdio.h>int main() {printf("hello world\n");//使用printf库函数 注意引用头文件return 0; } 2.输入半径 计算圆的面积 int main() {float r, s;//定义变量scanf("%f", &r);//输入半径s 3.14 * r * r;// 圆的…

重学java 47.集合 ② 迭代器

金榜题名&#xff0c;前程似锦 —— 24.5.27 一、迭代器的介绍和使用 1.概述 Iterator接口 2.主要作用 遍历集合 3.获取 Collection中的方法&#xff1a; Iterator<E> iterator() 4.方法 boolean hasNext() —> 判断集合中有没有下一个元素 E.next() —> 获取下一个…

迪普科技:量子安全“先行者”退场?

今年4月&#xff0c;迪普科技&#xff08;300768 SHE&#xff09;接受机构调研时被问及“公司对量子通讯所必需的安全产品在继续研究吗”时表示&#xff1a;“公司曾为量子通讯网络提供安全产品解决方案&#xff0c;从这点说与其他领域的安全产品区别不大”。换句话说&#xff…

5.30边缘智能开发工具链全解析 | 2024高通边缘智能创新应用大赛公开课

2024高通边缘智能创新应用大赛系列公开课迎来精彩续篇&#xff01;本期课程将由阿加犀智能科技技术总监秦朝&#xff0c;为大家带来一场关于边缘智能方案与创新应用的深度分享。 作为本次大赛的联合主办方&#xff0c;阿加犀为比赛设备提供强大的软件支持。 各位参赛者将上手…

如何根据系统的业务场景需求定制自己的线程池?

如何根据系统的业务场景需求定制自己的线程池? 1、背景2、生产中应当如何使用线程池才比较合理呢?2.1、指定线程数量2.2、选择合适的工作队列2.3、自定义线程工厂2.4、选择合适的拒绝策略3、自定义线程池代码案例1、背景 线程池有那么多的参数和类型,在实际的开发中,我们应…

网络原理-HTTP协议

HTTP协议 HTTP协议全称为超文本传输协议,除了能传输字符串,还能传输图片、视频、音频等。 当我们在访问网页的时候,浏览器会从服务器上下载数据,这些数据都会放在HTTP响应中,然后浏览器再根据这个HTTP响应显示出网页信息。 抓包 抓包工具本质上是一个代理工具,即我们将构造…

[合集] MySQL 8.x 系列文章清单

↑ 关注“少安事务所”公众号&#xff0c;欢迎⭐收藏&#xff0c;不错过精彩内容~ 从去年7月到现在&#xff0c;自 MySQL 发版模型变更后&#xff0c;已经发布了四个版本&#xff0c;意味着 MySQL 8.x 系列进入了长期支持状态。 当然&#xff0c;目前主要推荐的版本依旧是 MySQ…

闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?

前言 虽然说&#xff0c;目前 .NET FrameWork 上的大部分类都已经移植到 .NET Core 上&#xff0c;而且 .NET FrameWork 也已经停止了更新&#xff0c;未来必然是 .NET Core 的天下&#xff0c;但要说现在 .NET Core 就能淘汰 .NET FrameWork&#xff0c;我觉得为时尚早&#…

冯喜运:5.27黄金短线看震荡,今日黄金原油走势分析

【黄金消息面分析】&#xff1a;黄金作为传统的避险资产&#xff0c;在经济不确定性中扮演着至关重要的角色。近期&#xff0c;国际黄金价格经历了显著的波动。从5月9日的低点2325.19美元/盎司反弹至2340美元/盎司以上&#xff0c;尽管金价曾一度触及2449.89美元/盎司的历史高点…

帝国CMS验证码不显示怎么回事呢?

帝国CMS验证码有时候会不显示或打叉&#xff0c;总结自己的解决方法。 1、检查服务器是否开启GD库 测试GD库是否开启的方法&#xff1a;浏览器访问&#xff1a;/e/showkey/index.php&#xff0c;如果出现一堆乱码或报错&#xff0c;证明GD库没有开启&#xff0c;开启即可。 2…

四川汇聚荣科技有限公司好不好?

在当今科技飞速发展的时代&#xff0c;企业要想在激烈的市场竞争中脱颖而出&#xff0c;不仅需要先进的技术支持&#xff0c;还需要优质的服务和良好的口碑。那么&#xff0c;四川汇聚荣科技有限公司是否具备这些条件呢?接下来&#xff0c;我们将从公司实力、服务质量、客户反…

零售EDI:Target DVS EDI项目案例

Target塔吉特是美国一家巨型折扣零售百货集团&#xff0c;与全球供应商建立长远深入的合作关系&#xff0c;目前国内越来越多的零售产品供应商计划入驻Target。完成入驻资格审查之后&#xff0c;Target会向供应商提出EDI对接邀请&#xff0c;企业需要根据指示完成供应商EDI信息…

如何在anaconda的环境下安装langchain

1、安装anaconda&#xff1b; 2、在终端上&#xff0c;输入&#xff1a; conda install langchain -c conda-forge Proceed ([y]/n)? y 输入&#xff1a;Y 3、安装完成后&#xff0c;输入&#xff1a; python -c "import langchain; print(langchain.__version__)&…

Java三种方法实现多线程,继承Thread类,实现Runnable接口,实现Callable接口

目录 线程&#xff1a; 继承Thread类&#xff1a; 实现Runnable类&#xff1a; 实现Callable接口&#xff1a; 验证多线程&#xff1a; 线程&#xff1a; 定义&#xff1a;进程可以同时执行多个任务&#xff0c;每个任务就是线程。举个例子&#xff1a;一个Java程序&#…

基于springboot+vue的班级综合测评管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

【简单介绍下线性回归模型】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

CEF框架:各种各样的Handle(四)——CefURLRequest,发起HTTP请求与处理

文章目录 CEF的HTTP请求类CefResourceRequestCefURLRequest CefURLRequest的使用cef_message_routehandled&#xff1a;urlrequet的处理类OnQuery CefURLRequestClient CEF的HTTP请求类 在CEF框架中&#xff08;Chromium Embedded Framework&#xff09;&#xff0c;CefURLReq…

【读书】读书笔记——理科生的视角:底层逻辑+数学之美

1&#xff0c;底层逻辑1&#xff08;看清这个世界的底牌&#xff09; 刘润 著 0&#xff09;什么是底层逻辑&#xff1f; 底层逻辑是&#xff1a;事物之间共同点、变化背后不变的东西事&#xff1b;看清事物的本质&#xff0c;才能在复杂变化中从根本上解决问题。 1&#x…

红队攻防渗透技术实战流程:红队目标上线之webshell工具魔改

红队攻防免杀实战 1. 红队目标上线-Webshell免杀-源码魔改1.2 Webshell-代码混淆&流量绕过&工具原理1.2 通过对冰蝎的数据包分析:1.2魔改冰蝎-JAR反编译打包构建1.2魔改冰蝎-防识别-打乱特征指纹1.2魔改冰蝎-防查杀-新增加密协议1. 红队目标上线-Webshell免杀-源码魔改…

win10/win11 优先调用大核的电源计划性能设置

前言 大小核&#xff0c;即Intel 12代开始的P-core&#xff08;性能核&#xff0c;一般叫大核&#xff09;和E-core&#xff08;能效核&#xff0c;一般叫小核&#xff09;异核架构。说下个人理解&#xff0c;就是英特尔为了增加cpu性能&#xff0c;但是又因为架构和功耗的限制…