Java 继承与方法重写实战:从 “中国人与美国人“ 理解面向对象核心
·
在 Java 面向对象编程(OOP)中,继承和方法重写是最核心的两个知识点,也是实现代码复用、功能扩展的关键。今天通过一个超经典的实验案例 ——「中国人与美国人」,用通俗易懂的方式拆解这两个知识点,彻底掌握它们的用法和底层逻辑。
一、先搞懂核心概念:继承 vs 方法重写
1. 什么是继承?
继承就是子类复用父类的属性和方法,就像现实中孩子继承父母的特征一样。
- 父类(基类):被继承的类,拥有公共的属性和方法
- 子类(派生类):继承父类的类,能直接用父类的东西,还能新增自己的特性
- Java 语法:
子类 extends 父类 - 好处:不用重复写代码,提高开发效率,让代码结构更清晰
2. 什么是方法重写(Override)?
子类觉得父类的方法不符合自己的需求,重新定义这个方法的实现,就叫方法重写。
- 规则:方法名、参数列表、返回值类型必须和父类完全一致
- 作用:让子类拥有个性化的行为,体现面向对象的多态性
二、案例需求与代码实现
案例结构:People(父类:人类)→ ChinaPeople/AmericanPeople(子类:中国人、美国人)→ BeijingPeople(孙类:北京人)
1. 父类:People.java
这是所有人类的公共父类,定义了人类共有的属性(身高、体重)和方法(打招呼、平均身高 / 体重)。
public class People {
// 受保护的属性:子类可以直接访问
protected double weight,height;
// 公共方法:打招呼
public void speakHello() {
System.out.println("yayayaya");
}
// 公共方法:平均身高
public void averageHeight() {
height=173;
System.out.println("average height:"+height);
}
// 公共方法:平均体重
public void averageWeight() {
weight=70;
System.out.println("average weight:"+weight);
}
}
✅ 关键点:protected 修饰的属性,子类可以直接使用,这是继承的特性之一。
2. 子类 1:ChinaPeople.java(继承 People)
中国人需要重写父类的打招呼、身高、体重方法,还新增了自己的特色方法「功夫」。
public class ChinaPeople extends People {
// 重写父类方法:打招呼
public void speakHello() {
System.out.println("您好");
}
// 重写父类方法:平均身高
public void averageHeight() {
height = 168.78;
System.out.println("中国人的平均身高:"+height+" 厘米");
}
// 【代码1】重写平均体重方法
public void averageWeight() {
weight = 65;
System.out.println("中国人的平均体重:65 公斤");
}
// 子类独有方法:中国功夫
public void chinaGongfu() {
System.out.println("坐如钟,站如松,睡如弓");
}
}
3. 子类 2:AmericanPeople.java(继承 People)
美国人同样重写父类方法,新增独有方法「拳击」。
public class AmericanPeople extends People {
// 【代码2】重写打招呼方法
public void speakHello() {
System.out.println("How do you do");
}
// 【代码3】重写平均身高方法
public void averageHeight() {
height = 176;
System.out.println("American's average height:176 cm");
}
// 重写父类方法:平均体重
public void averageWeight() {
weight = 75;
System.out.println("American's average weight:"+weight+" kg");
}
// 子类独有方法:美国拳击
public void americanBoxing() {
System.out.println("直拳、钩拳、组合拳");
}
}
4. 孙类:BeijingPeople.java(继承 ChinaPeople)
北京人继承中国人,再次重写方法,拥有更个性化的特征,还新增「京剧」方法。
public class BeijingPeople extends ChinaPeople {
// 【代码4】重写平均身高方法
public void averageHeight() {
height = 172.5;
System.out.println("北京人的平均身高:172.5 厘米");
}
// 【代码5】重写平均体重方法
public void averageWeight() {
weight = 70;
System.out.println("北京人的平均体重:70 公斤");
}
// 独有方法:京剧
public void beijingOpera() {
System.out.println("花脸、青衣、花旦和老生");
}
}
5. 测试类:Example.java
创建对象,调用方法,验证继承和重写的效果:
public class Example {
public static void main(String args[]) {
ChinaPeople chinaPeople=new ChinaPeople();
AmericanPeople americanPeople=new AmericanPeople();
BeijingPeople beijingPeople=new BeijingPeople();
// 调用打招呼方法
chinaPeople.speakHello();
americanPeople.speakHello();
beijingPeople.speakHello();
// 调用平均身高方法
chinaPeople.averageHeight();
americanPeople.averageHeight();
beijingPeople.averageHeight();
// 调用平均体重方法
chinaPeople.averageWeight();
americanPeople.averageWeight();
beijingPeople.averageWeight();
// 调用子类独有方法
chinaPeople.chinaGongfu();
americanPeople.americanBoxing();
beijingPeople.beijingOpera() ;
beijingPeople.chinaGongfu();
}
}
运行结果
您好
How do you do
您好
中国人的平均身高:168.78 厘米
American's average height:176 cm
北京人的平均身高:172.5 厘米
中国人的平均体重:65 公斤
American's average weight:75.0 kg
北京人的平均体重:70 公斤
坐如钟,站如松,睡如弓
直拳、钩拳、组合拳
花脸、青衣、花旦和老生
坐如钟,站如松,睡如弓
三、深度解析:案例中的核心知识点
1. 继承的传递性
Java 继承是多层传递的:People → ChinaPeople → BeijingPeople北京人不仅能使用ChinaPeople的属性和方法,还能间接使用People的所有内容。比如:beijingPeople.chinaGongfu() 就是继承了中国人的方法。
2. 方法重写的「覆盖效果」
子类重写父类方法后,调用时优先执行子类的方法,父类的方法会被覆盖。
- 父类
People的speakHello()输出yayayaya - 子类
ChinaPeople重写后,输出您好 - 创建子类对象调用时,执行的是重写后的方法,这就是重写的核心作用。
3. 子类可以拥有独有功能
继承不只是复用,还能扩展:
- 中国人独有:
chinaGongfu() - 美国人独有:
americanBoxing() - 北京人独有:
beijingOpera()这些方法父类没有,完美体现了子类的个性化。
4. protected 关键字的作用
父类用protected修饰weight和height,子类可以直接访问和修改。
- 区别:
private只能本类访问,public所有类访问,protected专门给子类使用。
四、方法重写的必守规则
写重写代码时,必须遵守这 5 条规则:
- 方法名完全相同
- 参数列表完全相同(个数、类型、顺序)
- 返回值类型完全相同(基本类型必须一致,引用类型可以是子类)
- 子类方法的访问权限不能低于父类(父类 public,子类只能 public)
- 不能重写父类
final、static、private修饰的方法
五、总结:继承 + 重写的核心价值
- 代码复用:父类写一次公共代码,所有子类直接用,不用重复开发
- 功能扩展:子类可以重写方法,实现个性化需求,不修改父类代码
- 结构清晰:用继承关系描述事物的层级,符合现实世界的逻辑
- 多态基础:方法重写是 Java 多态性的前提,是大型项目开发的核心
更多推荐

所有评论(0)