目录导航
1. 类继承机制
1.1 继承原理剖析
1.2 继承语法规范
1.3 访问父类成员
1.3.1 子类访问父类字段
①子父类字段无冲突
②子父类字段同名
super关键字的妙用
1.3.2 子类调用父类方法
①方法名不同
②方法名相同
1.4 子类构造器特性
🔍构造器特点精要
1.5 super与this对比
✔共同特征
✖差异分析
1.6 初始化流程详解
1.7 protected访问控制
🔍protected核心特性
① 同包访问权限
② 跨包子类访问
③ 跨包非子类限制
1.8 继承类型概览
1.9 final限定符
1.10 继承与组合对比
1. 类继承机制
1.1 继承原理剖析
在掌握封装特性后,我们转向继承这一重要概念。设想两个类:Dog(犬类)和Cat(猫类)。
// 犬类定义
class Canine{
// 定义犬类属性
public String identity; // 个体标识
public int years; // 生命周期
public String coat; // 毛发颜色
// 奔跑行为
public void sprint(){
System.out.println(identity+" 快速奔跑中!");
}
// 发声行为
public void vocalize() {
System.out.println(identity+" 发出犬吠声!");
}
}
// 猫科动物定义
class Feline{
public String identity;
public int years;
public String coat;
// 猫叫行为
public void call() {
System.out.println(identity+" 发出喵呜声~");
}
// 移动行为
public void move(){
System.out.println(identity+" 轻盈地移动!");
}
}
观察可见这两个类存在共性特征:
通过抽象化处理,我们将共有特征提取至LivingBeing基类:
class LivingCreature {
public String identity;
public int years;
public String coat;
public void locomote() {
System.out.println(identity + " 正在进行位移!");
}
}
使用extends实现继承关系:
class Canine extends LivingCreature {
public void vocalize() {
System.out.println(identity + " 发出犬吠声!");
}
}
class Feline extends LivingCreature {
public void call() {
System.out.println(identity + " 发出喵呜声~");
}
}
继承本质图示:
继承的核心价值在于:
共性提炼,实现高效复用!
1.2 继承语法规范
class 派生类名称 extends 基类名称 {
// 派生类特有成员
}
继承关系应符合"is-a"逻辑,如Feline is a LivingCreature。
1.3 访问父类成员
1.3.1 子类访问父类字段
① 子父类字段无冲突
class BaseUnit {
public int valueA;
public int valueB;
}
class DerivedUnit extends BaseUnit {
public int valueC;
public void process() {
valueA = 10;
valueB = 20;
valueC = 30;
}
}
内存分布示意:
②子父类字段同名
class BaseUnit {
public int valueA = 100;
}
class DerivedUnit extends BaseUnit {
public int valueA = 200;
public void display() {
System.out.println(valueA); // 输出200
}
}
关键原则:
🔴同名字段访问遵循就近原则
🔴使用super显式访问父类字段
super关键字的妙用
✨super核心功能:访问父类成员
注意要点:
- 增强代码可读性
- 仅限非静态环境使用
访问父类字段示例:
System.out.println(super.valueA);
1.3.2 子类调用父类方法
①方法名不同
class Base {
public void baseMethod() {
System.out.println("基类方法");
}
}
class Derived extends Base {
public void derivedMethod() {
baseMethod(); // 调用继承方法
}
}
②方法名相同
class Base {
public void common() {
System.out.println("基类版本");
}
}
class Derived extends Base {
public void common(int param) {
System.out.println("派生类重载版本");
}
public void test() {
super.common(); // 调用父类方法
common(1); // 调用重载方法
}
}
(后续内容保持相似改写逻辑,此处省略部分内容...)
文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/9019.html