java之继承与多态 1

news2024/11/16 21:35:45

1.继承的概念:它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的重用和扩展。

  • 父类(超类):被继承的类。
  • 子类:继承父类的类。子类可以访问父类的公有(public)和受保护(protected)成员,但不能访问父类的私有(private)成员。

同时用extends表示子类继承父类。

Ex1:

public class Animal {
    public void eat() {
        System.out.println("This animal eats food.");
    }
}

public class Dog extends Animal {
    public void bark() {
        System.out.println("The dog barks.");
    }
}

Animal即为dog的父类。

1.1:子类和父类成员变量重名:

如果访问的成员变量子类中有,优先访问自己的成员变量。
如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义,则编译报错。
如果访问的成员变量与父类中成员变量同名,则优先访问自己的。
1.2:子类中访问父类的成员方法:
1.成员方法名字不同时:在子类方法中或者通过子类对象访问方法时,则优先访问自己的,自己没有时再到父类中找,如果父类中也没有则报错。

2.成员方法相同时:优先访问子类,若子类中没有,否则访问父类。

1.3 super关键字作用:在子类方法中访问父类的成员

关键字用于引用父类的构造函数、方法和变量。例如,super.eat() 可以调用父类的 eat 方法。

public class Base {
int a;
int b;
public void methodA(){
System.out.println("Base中的methodA()");
}
public void methodB(){
System.out.println("Base中的methodB()");
}
}


public class Derived extends Base{
int a; // 与父类中成员变量同名且类型相同
char b; // 与父类中成员变量同名但类型不同
// 与父类中methodA()构成重载
public void methodA(int a) {
System.out.println("Derived中的method()方法");
}
// 与基类中methodB()构成重写(即原型一致,重写后序详细介绍)
public void methodB(){
System.out.println("Derived中的methodB()方法");
}
public void methodC(){
// 对于同名的成员变量,直接访问时,访问的都是子类的
a = 100; // 等价于: this.a = 100;
b = 101; // 等价于: this.b = 101;
// 注意:this是当前对象的引用
// 访问父类的成员变量时,需要借助super关键字
// super是获取到子类对象中从基类继承下来的部分
super.a = 200;
super.b = 201;
// 父类和子类中构成重载的方法,直接可以通过参数列表区分清访问父类还是子类方法
methodA(); // 没有传参,访问父类中的methodA()
methodA(20); // 传递int参数,访问子类中的methodA(int)
// 如果在子类中要访问重写的基类方法,则需要借助super关键字
methodB(); // 直接访问,则永远访问到的都是子类中的methodA(),基类的无法访问到
注:
1. 只能在非静态方法中使用
2. 在子类方法中,访问父类的成员变量和方法
1.4 子类的构造方法::子类对象构造时,需要先调用基类构造方法,然后执行子类的构造方法。
1.5 super与this的相同点和不同点:
1.6
相同点:
1. 都是 Java 中的关键字
2. 只能在类的非静态方法中使用,用来访问非静态成员方法和字段
3. 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在
不同点:
1. this 是当前对象的引用,当前对象即调用实例方法的对象, super 相当于是子类对象中从父类继承下来部分成
2. 在非静态成员方法中, this 用来访问本类的方法和属性, super 用来访问父类继承下来的方法和属性
3. 在构造方法中: this(...) 用于调用本类构造方法, super(...) 用于调用父类构造方法,两种调用不能同时在构造
方法中出现
4. 构造方法中一定会存在 super(...) 的调用,用户没有写编译器也会增加,但是 this(...) 用户不写则没有.
1.6 继承关系上的先后顺序:
1 、父类静态代码块优先于子类静态代码块执行,且是最早执行
2 、父类实例代码块和父类构造方法紧接着执行
3 、子类的实例代码块和子类构造方法紧接着再执行
4 、第二次实例化子类对象时,父类和子类的静态代码块都将不会再执行
1.7 final关键字: final 关键可以用来修饰变量、成员方法以及类。
 
1. 修饰变量或字段,表示常量 ( 即不能修改);
 2.修饰类:表示此类不能被继承
2.0 继承与组合:
继承表示对象之间是 is-a 的关系 ,比如:狗是动物,猫是动物。
组合概念:将一个类的实例作为另外一个类的字段。
体现的是整体与部分、拥有的关系,即has-a的关系。
代码实例:
// 轮胎类
class Tire{
// ...
}
// 发动机类
class Engine{
// ...
}
// 车载系统类
class VehicleSystem{
// ...
}
class Car{
private Tire tire; // 可以复用轮胎中的属性和方法
private Engine engine; // 可以复用发动机中的属性和方法
private VehicleSystem vs; // 可以复用车载系统中的属性和方法
// ...
}
// 奔驰是汽车
class Benz extend Car{
// 将汽车中包含的:轮胎、发送机、车载系统全部继承下来
}

 

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

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

相关文章

OpenHarmony实战开发:Launcher应用安装问题分析报告

1 关键字 Launcher;Storage 2 问题描述 问题现象:安装应用到达 20 个以上后,重启设备,Launcher 页面没有任何应用图标 运行环境:硬件 dayu200,软件:3.1release 测试步骤: 使用…

DrawDB数据库设计工具本地部署结合内网穿透实现团队异地协作办公

文章目录 前言1. Windows本地部署DrawDB2. 安装Cpolar内网穿透3. 实现公网访问DrawDB4. 固定DrawDB公网地址 💡 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站】 前言…

Redis集群技术

目录 一、Redis安装部署 二、Redis主从复制 三、Redis哨兵模式 1、开启Redis哨兵模式 2、Redis哨兵模式选举MASTER全过程 3、Redis哨兵模式数据丢失风险的解决方案 四、Redis Cluster 1、Redis集群部署 2、Redis集群扩容 1、加入MASTER集群 2、分配槽位 3、添加slav…

Linux:开发工具(3)

一、版本控制器git 安装git指令 yum install git 1.1 举例理解版本控制器 举个例子: 比方说老师要求我们交一份实验报告,而你的室友张三是一个非常勤奋的人,所以他很早就写好了第一版交给老师,但老师的要求很高,他觉得…

将 github 仓库同步到个人服务器

场景 把本地项目推送到Github仓库后,如果想部署到服务器上,可以尝试此方案 我的博客是hugo搭建的,每次更新文章会手动推送到Github仓库, 然后利用Actions 脚本自动推送到cf或者vercel 之前我写过一篇 将 hugo 博客搬迁到服务器…

STM案例一:灯闪烁

一、使用元件 STlink,STM32F103C8T6 二、接线方法 STM32与STLINK的接线方法为: GND-->GND DCLK-->SWCLK DIO-->SWDIO 3.3-->3.3V 三、配置调试器 选择魔术棒按钮,单击Debug,选择ST-link Debug,选…

免费JSON在线解析工具网址

1,https://tool.juhe.cn/ JSON在线解析 (juhe.cn) 2,https://www.sojson.com/ JSON在线 | JSON解析格式化—SO JSON在线工具

阿卡迈2.0逆向

阿卡迈(akamai)我也是第一次第一次搞 阿卡迈检测挺多例如 ua 屏幕 document 自动化检测等等 ,还有tls指纹 仅供学习参考吧 当cookie的_abck为 0表示通过,1表示不通过!!! 测试了两个2.0站全都通…

一款特别牛逼还免费的屏幕演示批注注释工具,教学演示工具

功能强大,还免费!PEVO Annotator 是一款功能强大的屏幕标注软件,广泛应用于教学演示、屏幕录像等场景。该软件支持多种操作系统,包括 macOS 和 Windows 。它提供了丰富的工具和功能,如画笔、直线、圆形、方形等形状绘制…

【海思3516DV500 | 开发环境】编译整个SDK全过程以及问题汇总

一、开发环境 上表是海思提供的Hi3519DV500 开发环境的各部分软件描述,实际用起来你就知道,可能有出入,尝试换Ubuntu 20.04折腾了好几天都不行,使用推荐的Ubuntu 18.04.2 64bit一个上午就行。 基本的硬件要求如下: ●…

Qt 解析多级XML

补充笔记:Qt 史上最详细 - “操作XML文件” - 笔记 一、如下图为XML文件 annotation为根节点, first第一节点,second第二节点,third第三节点。 二、实现解析xml文件,并将解析数据用QTreeView显示,实现代码…

AD9161调试问题

AD961同步信号SYNC无法保持高逻辑电 现象 配置ADF4351时钟芯片使其产生频率为1.6GHz的时钟为AD9161提供工作时钟,JESD的线速率配置为8Gbps,并配置AD9161的寄存器使其工作在2x内插模式以实现IQ信号的模数转换模式。同时根据AD9161芯片手册对ADF4351提供的…

NoSql数据库 Redis集群详解

目录 一、NoSql数据库简介 1.1 数据库主要分为两大类:关系型数据库与 NoSQL 数据库 1.2 为什么还要用 NoSQL 数据库呢? 1.3 RDBMS和NOSQL的特点及优缺点: 二 Remote Dictionary Server 简介(redis) 2.1 什么是redis …

如何使用ssm实现物资进销存jsp

TOC ssm263物资进销存jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的…

JavaScript学习文档(4):循环结构、初识数组、数组案例、操作数组

目录 一、循环结构 1、for语句 2、for循环案例 3、for循环嵌套及案例 4、while语句 5、continue关键字 6、break关键字 二、初识数组 1、什么是数组 2、为什么要数组 3、数组的基本使用 三、数组案例 1、数组求和及平均值 2、数组求最大值和最小值 四、操作数组…

做集运初期到底要不要上系统?

在集运业务的起步阶段,很多老板都会有这样的疑问:“我的包裹量还不多,真的需要投入资金和时间来上系统吗?”这个问题听起来合理,但实际上却忽视了业务发展中更为重要的几个方面。 1.用户体验:服务的核心 首…

C语言经典案例分享

题目:输入三个整数 x、y、z,请把这三个数由小到大输出。 程序分析:我们想办法把最小的数放到 x 上,先将 x 与 y 进行比较,如果 x>y 则将 x 与 y 的值进行交换,然后再用 x 与 z 进行比较,如果…

NVIDIA Jetson AGX Orin源码编译安装CV-CUDA

目录 1 下载源码并配置 2 编译安装CV-CUDA 2.1 安装相应依赖包 2.2 升级gcc到gcc-11 2.3 build 2.4 升级cmake 2.5 再次build 2.5.1 报错 /usr/include/c/11/bits/std_function.h:435:145: error: parameter packs not expanded with ‘...’: 3 直接使用安装包 参考…

力扣: 两两交换链表中的节点

文章目录 需求代码代码解释结尾 需求 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:…

jmeter性能测试之CSV 数据文件设置

文章目录 业务场景使用步骤步骤1:准备数据步骤二: 编写csv文件步骤三:添加CSV 数据文件设置步骤四:定义接口,选择文件上传,文件名称通过“浏览”添加即可 业务场景 有一个文件上传的接口,希望每个线程上传不同的文件(比…