Java基础-24-继承-认识继承-权限修饰符-继承的特点
在Java中,继承是面向对象编程(OOP)的一个重要特性。通过继承,一个类可以复用另一个类的属性和方法,从而实现代码的重用性和扩展性。以下是关于继承的一些关键点,包括权限修饰符和继承的特点。
1. 继承的基本概念
- 定义:继承是一种机制,允许一个类(子类或派生类)从另一个类(父类或基类)中获取属性和方法。
- 语法:
class Parent {// 父类的属性和方法 }class Child extends Parent {// 子类的属性和方法 } - 关键字:
extends是用于实现继承的关键字。
2. 权限修饰符与继承
在Java中,权限修饰符决定了父类中的成员是否可以被子类继承。以下是四种常见的权限修饰符及其作用:
| 修饰符 | 本类 | 同一包内 | 子类 | 全局(任何地方) |
|---|---|---|---|---|
private | √ | × | × | × |
| 默认(无修饰符) | √ | √ | × | × |
protected | √ | √ | √ | × |
public | √ | √ | √ | √ |
private成员:不能被子类继承。- 默认(无修饰符)成员:只能被同一包内的子类继承。
protected成员:可以被同一包内的子类和其他包中的子类继承。public成员:可以被任何地方的子类继承。
3. 继承的特点
(1)单继承性
- Java中,一个类只能直接继承一个父类(单继承)。
示例:class A {} class B extends A {} // 正确 class C extends A, B {} // 错误:不能同时继承多个类
(2)多层继承
- Java支持多层继承,即一个子类可以继承另一个子类。 示例:
class A {} class B extends A {} class C extends B {} // 多层继承
(3)方法重写(Override)
- 子类可以重写父类的方法,以提供不同的实现。
- 规则:
- 方法签名必须相同(方法名、参数列表)。
- 返回类型可以是父类方法返回类型的子类型(协变返回类型)。
- 访问权限不能比父类方法更严格。
(4)构造器调用
- 子类在实例化时会先调用父类的构造器(默认调用父类的无参构造器)。
- 如果父类没有无参构造器,则需要在子类构造器中显式调用父类的构造器,使用
super(参数)。 示例:class Parent {Parent(int x) {System.out.println("Parent Constructor with parameter: " + x);} }class Child extends Parent {Child() {super(10); // 显式调用父类构造器System.out.println("Child Constructor");} }
(5)Object 类
- 所有类的最终父类是
Object类(Java中所有类都直接或间接继承自Object)。 - 常用方法:
toString()、equals()、hashCode()等。
(6)final 关键字
final类:不能被继承。final class A {} class B extends A {} // 错误:A 是 final 类,不能被继承final方法:不能被子类重写。class A {final void method() {} } class B extends A {void method() {} // 错误:method 是 final 方法,不能被重写 }
4. 继承的优点
- 代码复用:子类可以直接复用父类的属性和方法。
- 扩展性:子类可以在父类的基础上添加新的功能或修改现有功能。
- 层次关系:通过继承可以建立清晰的类层次结构。
5. 继承的局限性
- 耦合性高:子类和父类之间存在强耦合关系,父类的变化可能会影响子类。
- 单继承限制:Java不支持多继承,某些场景下可能需要使用接口来弥补这一限制。
6. 示例代码
class Animal {protected String name;public Animal(String name) {this.name = name;}public void eat() {System.out.println(name + " is eating.");}
}class Dog extends Animal {public Dog(String name) {super(name); // 调用父类构造器}@Overridepublic void eat() {System.out.println(name + " is eating bones.");}public void bark() {System.out.println(name + " is barking.");}
}public class Main {public static void main(String[] args) {Dog dog = new Dog("Tommy");dog.eat(); // 输出:Tommy is eating bones.dog.bark(); // 输出:Tommy is barking.}
}
总结
- 权限修饰符 决定了父类成员是否可以被子类继承。
- 继承的特点 包括单继承性、多层继承、方法重写、构造器调用等。
- 合理使用继承可以提高代码的复用性和可维护性,但需要注意避免过度耦合。
如果你对某个具体知识点还有疑问,可以继续提问!
相关文章:
Java基础-24-继承-认识继承-权限修饰符-继承的特点
在Java中,继承是面向对象编程(OOP)的一个重要特性。通过继承,一个类可以复用另一个类的属性和方法,从而实现代码的重用性和扩展性。以下是关于继承的一些关键点,包括权限修饰符和继承的特点。 1. 继承的基本…...
Bootstrap 表格:高效布局与动态交互的实践指南
Bootstrap 表格:高效布局与动态交互的实践指南 引言 Bootstrap 是一个流行的前端框架,它为开发者提供了丰富的组件和工具,使得构建响应式、美观且功能丰富的网页变得更加简单。表格是网页中常见的元素,用于展示数据。Bootstrap 提供了强大的表格组件,可以帮助开发者轻松…...
pycharm相对路径引用方法
用于打字不方便,以下直接手写放图,直观理解...
新能源智慧灯杆的智能照明系统如何实现节能?
叁仟新能源智慧灯杆的智能照明系统可通过以下多种方式实现节能: 智能调光控制 光传感器技术:在灯杆上安装光传感器,实时监测周围环境的光照强度。当环境光线充足时,如白天或有其他强光源时,智能照明系统会自动降低路…...
Jenkins教程(自动化部署)
Jenkins教程(自动化部署) 1. Jenkins是什么? Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行&…...
行业智能体大爆发,分布式智能云有解
Manus的一夜爆红,在全球范围内引爆关于AI智能体的讨论。 与过去一般的AI助手不同,智能体(AI Agent)并非只是被动响应,而是主动感知、决策并执行的应用。Gartner预测,到2028年,15%的日常工作决策…...
日语Learn,英语再认识(5)
This is a dedicated function — it exists solely to solve this case. This is a dedicated function. It’s a dedicated method for solving this case. 其他备选词(但没dedicated精准): special → 含糊,有时只是“特别”…...
【区块链安全 | 第十四篇】类型之值类型(一)
文章目录 值类型布尔值整数运算符取模运算指数运算 定点数地址(Address)类型转换地址的成员balance 和 transfersendcall,delegatecall 和 staticcallcode 和 codehash 合约类型(Contract Types)固定大小字节数组&…...
音视频入门基础:MPEG2-TS专题(25)——通过FFmpeg命令使用UDP发送TS流
一、通过FFmpeg命令使用UDP发送TS流 通过以下FFmpeg命令可以将一个mp4文件转换为ts封装,并基于UDP发送(推流): ffmpeg.exe -re -i input.mp4 -vcodec copy -acodec copy -f mpegts udp://127.0.0.1:1234 其中: “in…...
Error in torch with streamlit
报错信息: This is the error which is a conflict between torch and streamlit: Examining the path of torch.classes raised: Tried to instantiate class path.path’, but it does not exist! Ensure that it is registered via torch::class Steps to reproduce: py…...
网络基础知识介绍
目录 一、计算机网络背景与发展 1.1 计算机网络的背景 编辑1.2 计算机网络的发展历程 二、网络协议 2.1 认识网络协议 2.3 协议分层 2.4 OSI七层模型 2.5 TCP/IP 五层(或四层)模型 三、网络传输基本流程 3.1 网络传输流…...
MIPS-32架构(寄存器堆,指令系统,运算器)
文章目录 0 Preview:寄存器32通用0 $zero1 $at2—3 \$v0-$v14—7 \$a0-$a38—15 \$t0-$t716—23 \$s0-$s724—25 \$t8-$t926—27 \$k0-$k128 $gp29 $sp30 $fp 指令系统运算存储器 0 Preview: MIPS架构有32位版本和64位版本,本文介绍32位版本 寄存器 正如笔者曾说…...
zip和tar.gz
本文来源: 在压缩文件格式选择上,zip和tar.gz有本质差异,主要体现在以下五个方面: 一、压缩机制不同 tar.gz是"两步走"方案:先用tar工具将多个文件/目录打包为单个未压缩的归档文件(保留权限…...
【什么是机器学习——多项式逼近】
什么是机器学习——多项式逼近 机器学习可以分成三大类别,监督学习、非监督学习、强化学习。三大类别背后的数学原理不同。监督学习使用了数学分析中的函数逼近方法和概率统计中的极大似然方法;非监督学习使用聚类和EM算法;强化学习使用马尔可夫决策过程的想法。 机器学习的…...
C++中的搜索算法实现
C中的搜索算法实现 在编程中,搜索算法是解决各种问题的基础工具之一。C作为一种功能强大的编程语言,提供了多种实现搜索算法的方式。本文将详细介绍两种常见的搜索算法:线性搜索和二分搜索,并通过代码示例展示它们的实现。 一、…...
(二十三)Dart 中的 Mixins 使用教程
Dart 中的 Mixins 使用教程 Mixins 简介 Mixins 是 Dart 中一种强大的特性,中文意思是“混入”,它允许在类中混入其他功能,从而实现类似多继承的功能。与传统的继承不同,Mixins 提供了一种更加灵活的方式来组合类的功能…...
《午夜地铁的幽灵AP》
点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万阅读 1.6万收藏 文章目录 **第一章:末班车的二进制月光****第二章:ESP32的赛博墓志铭****第三章:都市传说与CRC校验****第四章:数字孪生的献祭仪式****终章…...
创作领域“<em >彩</em><em>票</em><em>导</em><em>师</em><em>带</em><em>玩</em><em>群
天光揉碎最后一块夜斑,露珠压弯草叶的脆响惊醒了沉睡的巷子。青灰雾霭中,老墙上的爬山虎在打哈欠,卷曲的藤须滴落隔夜的月光。sFsTU...
Spring Cloud Gateway中GatewayFilter Factories(网关过滤工厂)的详细介绍
文章目录 1、网关过滤工厂介绍2、 GatewayFilter 过滤器的基本配置3、 Spring Cloud Gateway 内置 GatewayFilter Factories3.1、AddRequestHeader GatewayFilter3.2、AddResponseHeader GatewayFilter3.3、AddRequestParameter GatewayFilter3.4、RewritePath GatewayFilter3.…...
微服务架构:构建可持续演进的微服务架构的原则与实践指南
引言:微服务的价值锚点 某物流公司微服务化后,订单履约周期从2小时缩短至15分钟,但技术债务却以每年200%的速度增长。这个案例揭示了一个关键认知:微服务架构的成败不在于技术实现,而在于是否建立有效的演进机制。…...
C++的四种类型转换
文章目录 const_cast:去掉常量类型的类型转换static_cast:提供编译器认为安全的类型转换(在编译阶段完成类型转换)reinterpret:类似c风格的强制类型转化dynamic_cast:主要用在继承结构里,可以支持RTTI类型识别的上下转换dynamic_cast<>…...
Python Cookbook-4.15 字典的一键多值
任务 需要一个字典,能够将每个键映射到多个值上。 解决方案 正常情况下,字典是一对一映射的,但要实现一对多映射也不难,换句话说,即一个键对应多个值。你有两个可选方案,但具体要看你怎么看待键的多个对…...
《Python实战进阶》No37: 强化学习入门加餐版3 之 Q-Learning算法可视化升级
连续第4篇文章写Q-Learning算法及可视化 Q-Learning强化学习算法在迷宫寻路中的应用 引言 强化学习是机器学习的一个重要分支,其核心理念是通过与环境的交互来学习最优策略。在上三篇文章中,《Python实战进阶》No37: 强化学习入门:Q-Learn…...
1.两数之和(Java)
1. 题目描述 LeetCode 1. 两数之和(Two Sum) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的索引。 示例 1: 输入:nums [2,7,11,15], target 9 …...
漏洞挖掘---灵当CRM客户管理系统getOrderList SQL注入漏洞
一、灵当CRM 灵当CRM是上海灵当信息科技有限公司旗下产品,适用于中小型企业。它功能丰富,涵盖销售、服务、财务等管理功能,具有性价比高、简洁易用、可定制、部署灵活等特点,能助力企业提升经营效益和客户满意度。 二、FOFA-Sear…...
Java高频面试之集合-20
hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:讲讲 HashSet 的底层实现? HashSet 是 Java 集合框架中用于存储唯一元素的高效数据结构,其底层实…...
sort命令:排序
sort:默认首位排序 参数: -n:按整个数字排序 -r:降序 -u:去重 [rootrobin ~]# sort -n aa.txt #按数字排序(正序) [rootrobin ~]# sort -nr aa.txt #降序 [rootrobin ~]# sort -…...
Javaweb后端 AOP快速入门 AOP核心概念 AOP执行流程
AOP是对特定方法编程,把共用都用的方法提取出来,统一维护 AOP基础 AOP快速入门 对原始方法无影响 AOP核心概念 连接点,是原始方法,被控制范围内的原始方法 通知,AOP类里面写的公共的方法 切入点,实际被AO…...
deepseek ai 输入法
一、简介 使用java开发一个安卓输入法接入deepseek实现ai聊天,代码已开源。 二、视频演示 deepseek输入法_哔哩哔哩_bilibili 三、开源地址 https://github.com/deepseek/inputmethed 四、技术细节 CustomInputMethodService.java 输入法服务类 MainActivity.…...
Rust 所有权与引用
目录 Rust 所有权原则变量所有权变量作用范围深拷贝 Rust 的引用示例可变引用不可变引用可变引用和不可变引用不能同时存在悬垂引用 Rust 所有权原则 Rust 中每一个值都被一个变量所拥有,该变量被称为值的所有者一个值同时只能被一个变量所拥有,或者说一…...
