当前位置: 首页 > news >正文

java-继承

1.继承


1.1继承的概述

继承是java面向对象(封装,继承,多态)三大特征之一,在java中提供extends关键字,用于建立类与类之间的父子关系。

继承的特点:

  • 只支持单继承,不支持多继承,但支持多层继承。(下个区块详解)
  • 模糊爷爷曾祖这些概念,统称为父类,不过有直接父类和间接父类之分
  • 所有类都直接活间接继承object类(顶级父类)。
  • 单继承:一个子类只能继承一个父类。
  • 不支持多继承:子类不能同时继承多个父类。
  • 多层继承:子类继承一个父类,父类又继承另一个父类,形成继承链的关系。

继承的格式:

  • 格式:public class 子类名 extends 父类名
  • 例如:public class Zi extends Fu{}
  • Fu:父类,也称作基类、超类。
  • Zi:子类,也称作派生类。

代码演示:

创建一个父类Person

public class Person { String name; int age; public void eat(){ System.out.println("吃饭"); } }

创建一个子类Student

public class Studnet extends Person { }

通过Test测试类进行校验

public class Test{ public static void main(String[]args){ Student s =new Student(); s.eat(); } }

输出结果:吃饭

如何设计继承结构呢?

当类与类之间,存在相同(共性)的内容,并满足子类是父类中的一种,就可以考虑继承,来优化代码。


1.2继承的优缺点

继承的优点:

  • 可以把子类当中重复的代码抽取到父类当中,提高代码的复用性。
  • 子类可以在父类的基础上,添加新的功能,使子类更加强大。
  • 形成统一的体系(多态的基础)

继承的缺点:

  • 破坏封装性,子类和父类高度耦合。
  • 继承层次过深时,不易维护(当然层次不多时,就便于维护)。
  • 修改父类可能会影响所有子类。

1.3继承中成员特点

1.3.1成员变量

在访问子类方法中访问一个变量时,优先在子类方法的局部方法找,没有的话再去子类的成员变量去找(先局部再跳出去找,这是就近原则。)

接着还是没有的话,那么再跳出去,去直接父类当中寻找,还没有直接报错,不会去间接父类当中去寻找。

super关键字与this关键字的用法相似,在这里我们对比来看:

比较项this关键字super关键字
含义代表当前对象的引用代表父类对象的引用
访问属性this.属性 → 访问本类属性super.属性 → 访问父类属性
调用方法this.方法() → 调用本类方法super.方法() → 调用父类方法
查找范围先找本类,找不到再找父类直接找父类

:super关键字同样最多也只能访问到直接父类,间接父类是访问不到的。

例如:定义一个父类Fu

public class Fu { public int age = 10; }

定义一个子类Zi

public class Zi extends Fu { public int age = 20; public void show() { int age = 30; System.out.println(age); // 访问本类中的成员变量age System.out.println(this.age); // 访问Fu类中的成员变量age System.out.println(super.age); } }

测试:Test

public class Test { public static void main(String[] args) { Zi z = new Zi(); z.show(); } }

结果:30 20 10


1.3.2构造方法

父类中的子类方法并不会被子类继承!只能通过super关键字去调用(因为一个类的构造方法要与类名保持一致,子类显然不可与父类同名,所以不会继承)。

构造方法中的一些细节

  1. 在创建对象时,会先执行父类的构造方法,再执行子类的构造方法。因为子类会继承父类当中的成员(有些成员和构造方法一样不会被继承,下面将细说),可能还会用到父类当中的数据,所以子类初始化之前,一定要先将父类初始化。
  2. 子类的构造方法第一行,有一个默认的super(),用于调用父类的构造方法。
  3. 如果想要访问父类的有参构造,super()必须手动书写,不可省略。

例如:创建父类

public class Fu { public Fu() { System.out.println("Fu中无参构造方法被调用"); } public Fu(int age) { System.out.println("Fu中带参构造方法被调用"); } }

创建子类

public class Zi extends Fu { public Zi() { // super(); System.out.println("Zi中无参构造方法被调用"); } public Zi(int age) { // super(); System.out.println("Zi中带参构造方法被调用"); } }

测试Test:

public class Test { public static void main(String[] args) { Zi z = new Zi(); System.out.println("-------------------"); Zi zi = new Zi(18); } }

结果:


1.3.3成员方法

在子类对象访问方法时(与变量的访问过程类似),先子类成员范围找,如果找不到就在父类成员范围找,还没有直接报错,不会去间接父类当中去寻找。


1.4方法的重写

方法的重写:在子类中,把父类的方法再写一遍,方法申明(方法名,参数类型、顺序、数量)保持一致。

使用场景:如果父类的方法不能满足子类的要求了,子类中可以把该方法重写一遍。


方法重写的注意事项和要求:

1.重写方法的名称、形参列表必须与父类当中的一致,方法体按照实际需求去写。

2.final修饰的类为最终类,里面的所有方法不能被重写。

3.private私有方法、static静态方法、final最终方法不能被重写。

4.子类重写父类方法时,访问权限必须大于等于父类,如果返回值,返回值类型必须小 于等于父类(下面会介绍java中的权限修饰符)。


1.5子类真正可以继承父类的是什么

  • 构造方法:不能被子类继承,可以利用super关键字调用
  • 成员变量:可以被子类继承,private私有的也可以,但是无法直接调用,需要通过相关的get方法代用。
  • 成员方法:虚方法可以被继承(虚方法:非final、static、private修饰的方法)

final修饰的最终方法不能被继承,可以被调用。

static修饰的静态方法能被继承,可以被调用,但不可被重写。

private修饰的私有方法不能被继承,不可以被调用。

final修饰的最终方法不能被继承,可以被调用。

  • 编译期:一级一级往上找,遍历整个继承链,确定要调用的方法在某一类当中,记录方法的地址。
  • 运行期:直接运行编译时确定的方法,虽然降低了编译速度,但是运行速度得到保证。

static修饰的静态方法不能被继承,可以被调用。

  • 编译期:一级一级往上找,遍历整个继承链,确定要调用的方法在某一类当中,将对象调用方法直接修改为类名调用方法。
  • 运行期:直接运行。

1.6java中的权限修饰符

修饰符同一个类本包中其他类不同包下的子类不同包下的无关类
private可以
省略可以可以
protected可以可以可以
public可以可以可以可以
http://www.jsqmd.com/news/500145/

相关文章:

  • 关于 Cactus-react-native 构建问题记录
  • 2026论文降AI率工具怎么选?实测对比后我只认这一款
  • 用腾讯小龙虾装原装小龙虾。全网最快装小龙虾邪修大法,小学生都能装。
  • 让软件工程师更轻松的6个工具
  • MCP Tool 实现进度通知
  • 【设计模式】依赖注入控制反转
  • 体验完阿里「悟空」,我想把电脑里的龙虾换掉了,是真NB!
  • 基于SpringBoot的汽车美容保养系统
  • 主机管理---windows2012配置ftp服务器20240813
  • Ansys Zemax | 什么是Sobol取样?
  • 词嵌入(Word Embedding)和位置编码(Positional Encoding)
  • 常用的AIGC 检测工具有哪几种?
  • 被查出AI率不要慌!2026免费毕业论文去痕神器盘点
  • Cesium 中基于 1.19.11 实现自定义影像与哈密地形加载
  • 素材分类即搜即用:视频数字资产管理让制作周期缩短 70%,效率翻倍
  • [Win11家庭中文版]如何关闭基于虚拟化的安全性VBS(为了解决VBS启用状态下 VMware性能很差 频繁闪退或有各种不一样的崩溃报错)
  • 【小白说】【论文拆解】Neural-Pull: Learning Signed Distance Functions from Point Clouds by Learning to Pull Sp
  • Window(10/11)QQ多开
  • 嘎嘎降AI9大平台验证怎么用?上传到出结果完整操作录屏
  • SEO_2024年最新的SEO策略与方法详解
  • SEO_持续提升网站SEO排名的长期维护方案
  • shell脚本语言知识点总结
  • PDF转Word工具2026深度评测:5款主流工具权威评分体系与案例解析
  • 跨境电商合规智能化:版权检测能力与 Agent Skill 的技术融合与落地实现
  • 刚刚!GPT-5.4 mini/nano正式发布,轻量编程模型性能逼近满血版
  • 2026盘点:毕业论文AIGC降重怎么破?这款工具免费用!
  • SEO_中小企业必备的低成本SEO推广方法
  • 二十、kubernetes基础-30-kubernetes-ha-binary-deployment-07-dns-operations
  • 什么是Skill
  • 3月18日打卡