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

JAVA---继承

继承

1. 在  Java  里,继承是面向对象编程的重要特性之一,它允许一个类(子类、派生类)继承另一个类(父类、基类)的属性和方法;

2. Java 中提供一个关键字 extends ,用这个关键字,我们可以让一个类和另一个类建立起继承关系;

public class Srudent extends Person  {}
public class 子类 extends 父类 {}

  Student 称为子类(派生类)

  Person 称为父类(父类、超类)

e.g.

//基本语法示例
// 父类
class ParentClass {// 父类的属性int parentAttribute;// 父类的方法void parentMethod() {System.out.println("This is a method from the parent class.");}
}// 子类
class ChildClass extends ParentClass {// 子类的属性int childAttribute;// 子类的方法void childMethod() {System.out.println("This is a method from the child class.");}
}

什么时候会用到继承?

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


使用继承的好处:

1. 可以把多个子类中重复的代码抽取到父类中,减少代码冗余,提高代码复用性

2. 子类可以在父类的基础上,增加其他的功能,使子类更强大。


继承的特点

Java 只支持单继承,不支持多继承,但支持多层继承。

单继承:一个子类只能继承一个父类;

不支持多继承:子类不能同时继承多个父类;

多层继承:子类 A 继承父类 B,父类 B 可以继承父类 C

                  每一类都直接或间接的继承于 Object


继承的限制

1. Java 只支持单继承,即一个类只能直接继承自一个父类。

2. 私有成员(private)不能被继承,但可以通过公共的访问器方法来访问。

示例:

class Animal {String name;Animal(String name) {this.name = name;}void eat() {System.out.println(name + " is eating.");}
}class Dog extends Animal {Dog(String name) {super(name);}void bark() {System.out.println(name + " is barking.");}
}public class Main {public static void main(String[] args) {Dog dog = new Dog("Buddy");dog.eat();dog.bark();}
}

在这个示例中,Dog 类继承了 Animal 类,并且添加了自己的 bark 方法。在 Main类的 main方法中,创建了一个 Dog对象,并调用了它继承的 eat方法和自己的 bark方法。


子类到底能继承父类中的哪些内容?

构造方法

继承中:构造方法的访问特点

1. 父类中的构造方法不会被子类继承,但是可以通过super()调用;

2. 子类构造方法的第一行,有一个默认的super();

3. 子类中所有的构造方法默认先访问父类中的无参构造,再执行自己;

4. 如果想要方法中父类有参构造,必须手动书写。

为什么?

1. 子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类中的数据;

2. 子类初始化之前,一定要调用父类构造方法先完成父类数据空间的初始化。

怎么调用父类构造方法?

子类构造方法的第一行语句默认为:super(),不写也存在,且必须在第一行


成员变量

继承中:成员变量的访问特点

就近原则

现在局部位置找,本类成员位置找,父类成员位置找,逐级向上。

如果出现了重名的成员变量怎么办?

System.out.println(name); //从局部位置开始向上找System.out.println(this.name);  //从本类成员位置开始向上找System.out.println(super.name);  //从父类成员位置开始向上找

成员方法

继承中:成员方法的访问特点

直接调用满足就近原则:谁离我近,我就用谁

this调用:就近原则

super调用:直接找父类


方法重写

当父类的方法不能满足子类现在的需求时,需要进行方法重写

在继承体系中,子类出现和父类一模一样的方法声明。

本质:覆盖虚方法表中的方法

如果发生重写,则会覆盖

书写格式:

在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法。

@Override重写注释

1. @Override是放在重写方法上的,校验子类重写时语法是否正常;

2. 加上注释后如果有红色波浪线,表示语法错误;

3. 建议重写方法都加@Override注释,代码安全,优雅!

4. 提高代码可读性。

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

1. 重写方法的名称、形参列表必须与父类中保持一致;

2. 子类重写父类方法时,访问权限子类不许大于等于父类

(暂时了解:空着不写<protected<public)

3. 子类重写父类方法时,返回值类型子类必须小于等于父类;

4. 建议:重写的方法尽量和父类保持一致;

5. 只有被添加到虚方法表中的方法才能被重写。

(私有方法不能被重写

  子类不能重写父类中的静态方法,如果重写会报错)

http://www.xdnf.cn/news/3960.html

相关文章:

  • avx指令实现FFT
  • 【Linux系统】互斥量mutex
  • 当SONiC遇到CPO,SONiC对共封装光接口的管理
  • 在两个bean之间进行数据传递的解决方案
  • langchain中 callbacks constructor实现
  • 如何使用python保存字典
  • **马小帅面试记:Java技术问答**
  • 邮件协议、签名与推送
  • Learning vtkjs之MultiSliceImageMapper
  • 【C++】Docker常用语法
  • VTK入门指南
  • Leetcode 3538. Merge Operations for Minimum Travel Time
  • Spring AI版本1.0.0-M6和M8效果比较
  • Shell-流程控制-判断
  • 过采样处理
  • educoder平台课-Python程序设计-6.序列类型
  • 【翻译、转载】【转载】LLM 的函数调用与 MCP
  • Linux 的网络卡
  • ST-LINKV2仿真器下载
  • Java基于SaaS模式多租户ERP系统源码
  • 四年级数学知识边界总结思考-上册
  • GCC 使用指南
  • 具身系列——Q-Learning算法实现CartPole游戏(强化学习)
  • 实时操作系统与AI Agent的协同进化:重塑人形机器人产业格局
  • 「分享」学术工具
  • vae笔记
  • P4549 【模板】裴蜀定理
  • Android第三次面试总结之Java篇补充
  • 不定长滑动窗口(求最短/最小)
  • [运维]Linux安装、配置并使用atop监控工具