20220724-Java的继承
含义
继承Extends
面向对象最显著的一个特性,继承是从已有的类中派生出新的类,新的类能吸收已有类的性和方法,并能扩展新的能力。
代码示例
class People { //父类的私有属性 private String name; private String color; private int age; //父类构造器 public People(String name, String color, int age) { this.name = name; this.color = color; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //父类共有方法 public void eat() { System.out.println("吃东西"); } } class Student extends People { //子类特有属性 private int id; //子类构造器 public Student(String name, String color, int age, int id) { super(name, color, age); this.id = id; } public int getId() { return id; } public void setId(int id) { this.id = id; } //子类可以覆盖父类中已有的方法,进行差异化设计 @Override public void eat() { System.out.println("学生吃东西"); } //子类中特有的方法 public void xuexi() { System.out.println("学习"); } }
使用方法和注意事项
- 子类自动拥有父类定义的属性和方法
- 父类又叫做超类、基类
- 子类又叫导出类、派生类
- 继承可以调高代码复用性
- 继承提高代码扩展性和维护性
- 子类必须调用父类的构造器,完成父类的初始化
- 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中显示使用super去指定调用父类的哪个构造器完成父类的初始化工作,否则编译不通过
- super在使用时,需要放在构造器第一行
- super()与this()都只能放在构造器第一行,因此两个方法不能存在同一个构造器中
- Java所有类都是Object类的子类
- 子类最多只能继承一个父类(直接继承),java为单继承机制
- 不能滥用继承,子类和父类的关系需要满足is-a的逻辑关系
- 继承设计的基本思想:父类的构造器完成父类属性的初始化,子类构造器完成子类属性的初始化
个人理解
- 因为继承是is-a的关系,子类需要具有父类的属性和方法,但可以保持其独特性和扩展性,比如学生和职员都属于人类,可以将人类作为基类,而学生和职员分别作为子类;人类都具备姓名、性别等属性,都具备吃饭、睡觉等方法,但是学生除上述外还具备学号、分数等一些特有属性,具备上课学习等特有方法。
- 基类中应该包含共有的属性和方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)