【Java初阶】面向对象三大特性之继承

news2025/1/19 22:20:54

一、继承

理解继承

Cat继承了Animal类,其中:Animal类称为父类/基类或超类,Cat可以称为Animal的 子类/派生类,继承之后,子类可以复用父类中成员,子类在实现时只需关心自己新增加的成员即可

Java中不支持多继承,仅支持A extends B 单继承//A extends B B extends C 多层继承 //A extends C B extends C 不同类继承自同一类。

public class TestExtend {
    public static void main(String[] args) {
       Dog d1 =new Dog();
       d1.name = "xiaocs";
       d1.age = 15;
       Cat c1 = new Cat();
       c1.color = "red";
       c1.type = "波斯";
       c1.friendly();
    }
}
/**
*    Dog未继承animal则无法调用animal中的成员变量和成员方法
*/
class Dog{
    public  int age;

    public String  name;
    
    public void shot(){
        System.out.println("汪汪汪");
    }
}
//cat可以直接调用animal中的成员变量和成员方法
class Cat extends animal{
    public int weight;

    public String sex;
    
    public void eat(){
        System.out.println("嘎嘎吃");
    }

}
class animal{
    public String  color;

    public String type;
    
    public void friendly(){
        System.out.println("对人类友好");
    }

}

子类访问父类

子类和父类不存在同名成员变量

public class Base {
    int a;
    int b;
}
public class Derived extends Base{
    int c;
    public void method(){
        a = 10; // 访问从父类中继承下来的a
        b = 20; // 访问从父类中继承下来的b
        c = 30; // 访问子类自己的c
    }

子类和父类成员变量同名

public class Base {
    int a;
    int b;
    int c;
} 

public class Derived extends Base{
    int a; // 与父类中成员a同名,且类型相同
    char b; // 与父类中成员b同名,但类型不同
    public void method(){
        a = 100; 
        b = 101; 
        c = 102; // 子类没有c,访问的肯定是从父类继承下来的c
     // d = 103; // 编译失败,因为父类和子类都没有定义成员变量b
    }
}

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

成员方法亦然,如果子类有则先访问子类的,子类没有先访问父类的,如果存在方法重载,则根据引用的情况,选择合适的方法

在子类方法中,如果想要明确访问父类中成员时,借助super关键字即可

二、super关键字

当父类和子类的成员变量或成员方法相同时,调用父类的成员变量或方法,使用super关键字

class Cat extends animal{
    public int color;

    public String type;

    public void eat(){
    
    //调用父类的成员变量
        super.color = "red";
        super.type = "波斯";
        super.friendly();
        System.out.println("嘎嘎吃");
    }

}
class animal{
    public String  color;
    public String type;

    public void friendly(){
        System.out.println("对人类友好");
    }
}

子类的构造方法(无参数)

若父类显式定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用,即调用基类构造方法

public class TestExtend {
    public static void main(String[] args) {
        Cat c = new Cat();
    }
}
class Cat extends animal{
    public int size;
    public String name;

    public Cat(){
        // super(); 
                   //注意子类构造方法中默认会调用基类的无参构造方法:super(), 
                   // 用户没有写时,编译器会自动添加,而且super()必须是子类构造方法中第一条语句,
                   // 并且只能出现一次
        System.out.println("Cat::");
    }
    public void eat(){
        System.out.println("嘎嘎吃");
    }

}
class animal{
    public String  color;
    public String type;

    public animal() {
        System.out.println("animal::");
    }
    public void friendly(){
        System.out.println("对人类友好");
    }
}

子类对象构造时,需要先调用父类构造方法,然后执行子类的构造方法。

子类的构造方法(有参数)

如果父类构造方法是带有参数的,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的父类构造方法调用,否则会编译失败

public class TestExtend {
   public static void main(String[] args) {
       Cat c = new Cat("red","波斯",45,"xiaos");
   }
}
class Cat extends animal{
   public int size;
   public String name;

   public Cat(String color, String type, int size, String name) {
       super(color, type);
       this.size = size;
       this.name = name;
   }
   public void eat(){
       System.out.println("嘎嘎吃");
   }
}
class animal{
   public String  color;
   public String type;

   public animal(String color, String type) {
       this.color = color;
       this.type = type;
   }
   public void friendly(){
       System.out.println("对人类友好");
   }

}

在子类构造方法中,super(...)调用父类构造时,必须是子类构造函数中第一条语句。

super(...)只能在子类构造方法中出现一次,并且不能和this同时出现

✅super和this之间的区别?

相同点:

1.都属于java 中的关键字

2.只能在类的非静态方法中使用,用来访问 非静态的方法和字段

3.在构造 方法中使用时必须是构造方法当中的第一条语句,并且二者不能同时存在

不同点:

1.this指的是当前对象的引用,super指的是当前对象对父类部分对象的使用

在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性

在构造方法当中,this用于调用本类的构造方法,super调用父类的构造方法,两种调用不能同时在构造方法中出现

构造方法中一定会存在super(...)的调用,用户没有写编译器也会增加,但是this(...)用户不写则没有

三、继承关系下的代码块

public class TestExtend {
    public static void main(String[] args) {
        Cat c = new Cat("red","波斯",45,"xiaos");
    }
}
class Cat extends animal{
    public int size;
    public String name;
    //5.子类的实例代码块
    {
        System.out.println("cat::实例");
    }
    //2.子类的静态代码块
    static{
        System.out.println("cat::static");

    }
    //6.子类的构造方法
    public Cat(String color, String type, int size, String name) {
        super(color, type);
        this.size = size;
        this.name = name;
        System.out.println("cat::构造");
    }
    public void eat(){
        System.out.println("嘎嘎吃");
    }
}
class animal{
    public String  color;
    public String type;

    //3.父类的实例代码块
    {
        System.out.println("animal::实例");
    }
    //1。父类的静态代码块
    static{
        System.out.println("animal::static");

    }
    //4.父类的构造方法
    public animal(String color, String type) {
        this.color = color;
        this.type = type;
        System.out.println("animal::构造");
    }
    public void friendly(){
        System.out.println("对人类友好");
    }

根据执行结果可以的出以下结论:

父类的静态代码块>>子类的静态代码块>>父类的实例代码块>父类的构造方法>>子类的实例代码块>> 子类的构造方法

第二次实例化子类对象时,父类和子类的静态代码块都将不会再执行

四、protected关键字

访问限定:同一个包中的类和不同包中的子类

package TestDemo2;

public class B {
    private int a;
    protected int b;
    public int c;
    int d;
}

在不同包中即package TestDemo 中

只有public和protected修饰的成员可以访问

五、final关键字

修饰变量时: 表示常量即不能修改

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

修饰类时: 表示此类不能被继承,即不能作为父类

//final修饰
final class animal{
    public String  color;
    public String type;
    public animal(String color, String type) {
        this.color = color;
        this.type = type;
        System.out.println("animal::构造");
    }
}

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

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

相关文章

DBCO-PEG24-O-amine,DBCO-PEG24-O-NH2,二苯并环辛炔-二十四聚乙二醇-O-氨基

DBCO-PEG24-O-amine中叠氮化物和DBCO基团,DBCO 点击化学可以在水性缓冲液中运行,也可以在有机溶剂取决于底物分子的性质。带有 PEG 臂的试剂会增加化合物的亲水性。DBCO 试剂已应用于生物偶联、标记和化学生物学。 DBCO系列产品包括可用于进一步连接的DB…

机器学习回归模型相关重要知识点总结

回归分析为许多机器学习算法提供了坚实的基础。在这篇文章中,我们将总结 10 个重要的回归问题和5个重要的回归问题的评价指标。 一、线性回归的假设是什么 线性:自变量(x)和因变量(y)之间应该存在线性关系&…

PYNQ -z2 与 PC主板网口直连上网 可ping通外网

文章目录1.下载映像文件并烧录到板子2. 将usb和网线连接到电脑上3.将网络改为共享模式4. 使用xshell新建串口通信连接到板子5. 更改板子ip与PC 同一网段6. 通过ip地址访问7. 访问外网1.下载映像文件并烧录到板子 可以参考 烧录镜像 2. 将usb和网线连接到电脑上 3.将网络改为共…

【轻量级开源ROS 的机器人设备(5)】--(1)拟议的框架——µROS节点

前文链接: 【轻量级开源ROS 的机器人设备(4)】--(3)通信实现 【轻量级开源ROS 的机器人设备(4)】--(2)通信实现 【轻量级开源ROS 的机器人设备(4&#xff…

Docker+Jenkins+Gitee+Harbor+WebHooks实现CI/CD!

🎶 文章简介:DockerJenkinsGiteeHarborWebHooks实现CI/CD! 💡 创作目的:DockerJenkinsGiteeHarborWebHooks实现CI/CD! ☀️ 今日天气:天气有些阴沉 📝 每日一言:如果你执…

【设计模式】策略模式

【设计模式】策略模式 文章目录【设计模式】策略模式一:策略模式简介二:策略模式使用场景三:策略模式总结四:策略模式实战一:策略模式简介 在策略模式(Strategy Pattern)中,一个类的…

[附源码]Node.js计算机毕业设计房地产销售系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

怎么把图片转换成excel文件?

作为一个办公人员,难免会遇到图片里面有一些内容数据,需要编辑成Excel表格。如果我们按照上面图片表格,创建一个新的文件,这样就非常费时费力,还容易出错。其实小伙伴们如果需要,可以借助软件直接把图片变成…

聚观早报 | 百度 APP 上线疫情指数;辣条第一股卫龙在港上市

今日要闻:百度 APP 上线疫情指数;辣条第一股卫龙在港上市;特斯拉股价大跌引投资者不满;苹果将允许下载第三方商店;京东调集快递小哥驰援北京百度 APP 上线疫情指数 近日,百度 APP 正式上线「疫情指数」&…

CRM客户管理系统源码带手机端+Uniapp小程序源码+调试部署视频

一套Java大型CRM客户关系管理源码带手机端和小程序源码(带调试部署视频) 了解CRM源码更多信息可私信我。 相关技术: 1. 前端:Vue 2. 后端:Spring boot 3. 数据库:MySQL 4.小程序端:UNIAPP …

C++画图之GOC编程 第6课 通天云梯

Goc编程第一课 Goc编程第一课_哔哩哔哩_bilibili Goc编程第一课扩展加复习 Goc编程第一课扩展加复习_哔哩哔哩_bilibili Goc编程第二课 Goc编程第二课_哔哩哔哩_bilibili Goc编程第三课 Goc编程第三课_哔哩哔哩_bilibili Goc编程第四课 Goc编程第四课_哔哩哔哩_bilibili G…

程序员开发10年无法突破架构师?那是因为这个环节没做对

“架构师”对于程序员来讲,一定是大部分程序员所追求以及渴望达到的一个高度。那么,到底需要达到什么要求才能算是架构师呢?下面为大家分享一张Java架构师的岗位职责图,大家可以先看看参考参考。 从图中可以看出,架构师…

机器学习~从入门到精通(一)knn算法数据集处理训练模型

一、机器学习的概念 机器学习的概念: 重点在于学习 ,区别于让机器去执行我们定义好的规则 我们让机器去学习,也就是具备一定的预测能力,需要我们给机器大量的数据,以及给定对于这些数据 机器如何去看待的规则&#x…

小程序框架与生命周期

目录 框架 响应的数据绑定 页面管理 基础组件 丰富的 API 逻辑层 App Service 小程序的生命周期 注册页面 使用 Page 构造器注册页面 在页面中使用 behaviors 使用 Component 构造器构造页面 页面的生命周期 页面路由 页面栈 路由方式 注意事项 模块化 模块化…

P2P之ICE协议(二)

名词解释 Transport Address:包含IP、port和传输协议。 Candidate:除了Transport Address 外还包括类型、优先级、foundation还有Base。 Base:Host candidate 关联一个 Server reflexive candidate 。 ICE的建连过程 ICE实现NAT穿透的所要…

影像组学——一个入门级汇报

影像组学1 相关综述2 发展历程3 研究背景4 影像组学工作流程5 临床应用6 影像组学的问题及挑战7 发展趋势1 相关综述 1. Radiomics the process and the challenges 2. Radiomics Extracting more information from medicalimages 3. Integrating pathomics with radiomics an…

Qt新手入门指南——创建一个基于Qt Widget的文本查找器(二)

Qt是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 本教程将介绍如何使用…

原生JS之sort排序方法详解

在JavaScript中排序主要用到的api就是sort了,但是使用sort有几个坑需要注意,让我们一起来看看 排序原理-不使用参数时 sort() 方法用于对数组的元素进行排序。排序顺序可以是字母或数字,并按升序或降序。 默认排序顺序为按字典升序。 在不…

CSS 如何实现羽化效果?

最近碰到这样一个问题,在一张封面上直接显示书名,可能会存在书名看不太清楚的情况(容易受到背景干扰),如下 为了解决这个问题,设计师提了一个“究极”方案,将书名背后的图片模糊一下&#xff0c…

【OpenCV-Python】教程:6-1 相机标定

OpenCV Python 相机标定 【目标】 摄像机引起的失真类型如何找到相机的内参和外参如何基于这些特性校正这些图像 【理论】 一些针孔相机会导致图像发生严重失真,主要有两种,一是径向畸变,一是切向畸变。 径向畸变使直线看起来弯曲。距离…