0

0

Java继承与多态的语法基础

P粉602998670

P粉602998670

发布时间:2026-01-11 09:26:33

|

964人浏览过

|

来源于php中文网

原创

java类单继承且不可继承final类;私有成员存在但不可见;@override是编译期契约,防止重写失效;多态仅适用于非static、非final、非private的实例方法,调用由运行时类型决定。

java继承与多态的语法基础

子类继承父类时,extends 关键字的使用限制

Java 中一个类只能单继承,即只能用 extends 指定一个直接父类。试图写成 class A extends B, C 会直接编译失败,报错:error: class A inherits from multiple classes(实际错误信息为 error: '{' expected 或更明确的 multiple inheritance not allowed)。

如果需要复用多个类型的行为,应改用 implements 实现接口。接口可多实现,例如:class Dog implements Runnable, Comparable<dog></dog> 是合法的。

  • final 类不能被继承,声明为 final class Utils 后,任何 extends Utils 都会编译报错
  • 构造方法不会被继承,子类必须显式调用 super(...)(或隐式调用无参 super()),否则编译器会插入默认无参调用——若父类没无参构造器,就会报 constructor X in class Y cannot be applied to given types
  • 私有成员(private 字段/方法)虽在子类中不可见,但依然存在于子类对象内存布局中;只是无法通过 this.xxxsuper.xxx 直接访问

@Override 注解不是可选的“装饰”,而是编译期契约

重写父类方法时加不加 @Override 看似没区别,但漏写可能导致严重隐患:比如父类方法签名后期修改(如参数从 int 改为 long),子类未同步更新,又没加 @Override,编译器不会报错,结果变成定义了一个新方法,而非重写——多态调用时依旧执行父类逻辑,行为悄然偏离预期。

此外,@Override 还能防止拼写错误,例如把 toString() 错写成 toStirng(),不加注解时编译通过但毫无作用;加上后立即报 method does not override or implement a method from a supertype

立即学习Java免费学习笔记(深入)”;

淘宝互刷平台刷信誉源码
淘宝互刷平台刷信誉源码

淘宝互刷平台刷信誉源码主要特性:1、系统采用国内著名CMS内核做为基础模块化开发,继承CMS原有强大功能之外,同时拓展任务模块、快递单模块、会员模块、信用评价模块等多个相关模块,支持生成HTML静态和动态ASP,有效的提高了系统的性能,不仅减轻服务器的负载提高搜索收录率,增加网站收录。2、系统主要由淘宝任务、天猫任务、京东任务、阿里任务、拼多多任务、收藏任务、流量任务、快递单生成与查询系统、信用评

下载
  • 仅适用于实例方法(含抽象方法实现),不能用于 static 方法——静态方法“重写”实为隐藏(hiding),加 @Override 会编译失败
  • 不能用于构造方法、字段、局部变量
  • 接口默认方法(default)和静态方法(static)被实现类重写时,也必须加 @Override

多态调用的实际分派机制:编译时类型 vs 运行时类型

变量声明类型(编译时类型)决定**能调用哪些方法**,而实际指向的对象类型(运行时类型)决定**执行哪个版本的方法**。这是理解多态行为的关键分水岭。

Animal a = new Dog();
a.eat(); // ✅ 编译通过(Animal 有 eat()),运行时调用 Dog.eat()
a.bark(); // ❌ 编译失败:Animal 类没有 bark() 方法,哪怕 a 实际是 Dog

常见误解是认为“只要对象是子类,就能调用子类特有方法”——错。必须通过子类引用或向下转型才能访问:

  • 安全做法:先用 instanceof 判断,再 (Dog) a 强转(注意空指针风险)
  • 更现代写法:用 if (a instanceof Dog dog)(Java 14+ 模式匹配),此时 dog 是已转换的局部变量
  • 字段访问不具多态性:若 Animal.nameDog.name 都存在,a.name 永远取 Animal.name 的值,与运行时类型无关

多态与 static / final / private 方法的关系

这三类方法在 Java 中都不参与动态绑定,即不支持多态。它们的调用目标在编译期就完全确定。

例如:

class Animal {
    static void sleep() { System.out.println("Animal sleep"); }
    final void breathe() { System.out.println("Animal breathe"); }
    private void hunt() { System.out.println("Animal hunt"); }
}
class Dog extends Animal {
    static void sleep() { System.out.println("Dog sleep"); }
    final void breathe() { System.out.println("Dog breathe"); } // 编译错误!final 方法不能重写
    private void hunt() { System.out.println("Dog hunt"); } // ✅ 合法,但这是新方法,与父类 hunt() 无关
}
  • static 方法属于类,调用看的是引用的**编译时类型**:Animal a = new Dog(); a.sleep(); 输出 Animal sleep
  • final 方法禁止重写,因此不存在“选择哪个版本”的问题;子类中同名方法会被编译器拒绝(除非是重载)
  • private 方法隐式具有 final 语义,且对子类不可见,子类里写的同名方法本质上是全新方法,跟父类毫无关系

真正参与多态的,只有非 static、非 final、非 private 的实例方法——而且前提是它们在继承链中被正确定义和重写。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

839

2023.08.22

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

411

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

366

2023.10.25

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

910

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

597

2024.08.29

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

48

2026.02.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.1万人学习

C# 教程
C# 教程

共94课时 | 10.6万人学习

Java 教程
Java 教程

共578课时 | 75.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号