前言
在Java面向对象三大特性中,继承是代码复用的核心基石,而多态是程序高扩展性的灵魂。熟练掌握继承语法、方法重写、父子类类型转换,再结合多态思想开发,能彻底告别冗余重复代码,写出结构清晰、易维护、易拓展的Java项目。
本文从零带你吃透Java继承全套用法,从基础继承实现、重写规则、上下转型,再到多态核心概念与真实业务案例,全程代码实战,适合Java零基础进阶、巩固面向对象核心知识点。
一、Java 继承使用初探
1.1 继承核心作用
继承就是子类复用父类中非私有属性和方法,实现代码复用,减少重复代码编写。
父类(超类/基类):抽取公共通用成员
子类(派生类):继承父类,扩展独有功能
Java只支持单继承,一个子类只能有一个直接父类,避免类层级混乱
1.2 继承使用场景
多个类存在重复属性、重复行为时,统一抽取为父类,其余类继承父类即可。
例:学生、老师、员工都拥有姓名、年龄、性别,可抽取Person父类统一封装。
二、类的继承与继承实现
2.1 继承语法格式
// 父类
public class 父类名 {
// 公共属性、公共方法
}
// 子类继承父类
public class 子类名 extends 父类名 {
// 子类独有属性、独有方法
}
关键字:extends,代表继承关系
2.2 继承权限访问规则
public:任意位置均可访问
protected:同包、子类均可访问
默认权限(包权限):仅同包访问
private:子类无法继承访问,只能通过父类get/set方法调用
2.3 基础继承代码实现
父类:公共人类
public class Person {
// 公共属性
protected String name;
protected int age;
// 公共方法
public void showInfo(){
System.out.println("姓名:"+name+" 年龄:"+age);
}
}
子类:学生类 继承人类
// 学生继承Person父类
public class Student extends Person {
// 学生独有属性
private String stuId;
// 学生独有方法
public void study(){
System.out.println(name+"正在认真学习");
}
}
测试调用
public class Test {
public static void main(String[] args) {
Student stu = new Student();
// 继承父类属性赋值
stu.name = "张三";
stu.age = 20;
// 调用父类方法
stu.showInfo();
// 调用子类独有方法
stu.study();
}
}
三、继承与方法重写(Override)
3.1 重写概念
子类重新定义父类已存在的同名同参方法,覆盖父类原有逻辑,实现子类个性化业务逻辑。
3.2 重写硬性规则
方法名、参数列表、返回值必须和父类一致
子类访问权限不能小于父类(父类protected,子类不能写private)
不能重写父类private、final、static方法
重写建议加上注解:@Override,编译自动校验语法
3.3 重写实战案例
在Student子类中重写父类showInfo方法:
public class Student extends Person {
private String stuId;
// 方法重写
@Override
public void showInfo() {
System.out.println("学生姓名:"+name+" 年龄:"+age+" 学号:"+stuId);
}
public void study(){
System.out.println(name+"正在认真学习");
}
}
调用时优先执行子类重写后的方法,不再执行父类原方法。
3.4 super关键字用法
super.成员变量:调用父类成员变量
super.成员方法():调用父类原有方法
super():调用父类无参构造,必须放在子类构造第一行
@Override
public void showInfo() {
// 先执行父类原有逻辑
super.showInfo();
// 再扩展子类逻辑
System.out.println("学生专属信息");
}
四、继承与类型转换(父子类转型)
继承体系中存在两种类型转换:向上转型、向下转型,是多态实现的基础。
4.1 向上转型(自动转型)
子类对象赋值给父类引用,系统自动完成,无需强转。
语法:父类 引用名 = new 子类();
特点:
只能调用父类定义的方法/属性
执行的是子类重写后的方法
无法调用子类独有方法
// 向上转型
Person person = new Student();
person.showInfo(); // 执行子类重写方法
4.2 向下转型(强制转型)
父类引用转回子类对象,必须手动强转,存在转型异常风险。
语法:子类 引用名 = (子类)父类引用;
4.3 转型安全判断 instanceof
使用instanceof判断对象真实类型,避免ClassCastException类型转换异常
if(person instanceof Student){
Student stu = (Student) person;
stu.study(); // 调用子类独有方法
}
五、多态核心知识点
5.1 多态性概念
同一个行为,不同子类实现不同表现形式
多态实现三大前提:
必须存在继承关系
必须存在方法重写
必须存在向上转型
5.2 多态运行机制
编译看左边(父类引用),运行看右边(子类对象)
编译阶段:检查父类是否存在该方法
运行阶段:优先执行子类重写方法
5.3 多态优势
代码通用性极强,统一使用父类作为参数/返回值
新增子类无需修改原有核心代码,符合开闭原则
简化代码逻辑,降低项目维护成本
六、继承+多态综合实用案例
需求场景
编写动物体系:父类Animal,子类Dog、Cat,统一实现叫声方法,利用多态统一调用所有动物发声。
1. 顶层父类 Animal
public class Animal {
public void shout(){
System.out.println("动物发出叫声");
}
}
2. 子类 Dog 继承并重写
public class Dog extends Animal {
@Override
public void shout() {
System.out.println("小狗汪汪汪");
}
// 子类独有方法
public void guardHome(){
System.out.println("狗狗看家护院");
}
}
3. 子类 Cat 继承并重写
public class Cat extends Animal {
@Override
public void shout() {
System.out.println("小猫喵喵喵");
}
}
4. 多态统一调度工具类
public class AnimalUtil {
// 多态统一接收所有动物子类
public static void animalShout(Animal animal){
animal.shout();
// 向下转型调用独有方法
if(animal instanceof Dog){
((Dog) animal).guardHome();
}
}
}
5. 测试运行
public class PolymorphicTest {
public static void main(String[] args) {
// 向上转型实现多态
Animal dog = new Dog();
Animal cat = new Cat();
AnimalUtil.animalShout(dog);
AnimalUtil.animalShout(cat);
}
}
运行结果
小狗汪汪汪
狗狗看家护院
小猫喵喵喵
七、继承与多态总结
继承:extends实现,复用父类代码,搭建类层级结构
重写:子类重写父类方法,实现功能个性化,多态必备条件
类型转换:向上转型自动完成,向下转型配合instanceof安全强转
多态:依托继承+重写+向上转型实现,是项目解耦、代码拓展的核心思想
开发规范:通用功能抽父类,特有功能放子类,业务调用统一用父类多态接收
文末寄语
继承解决代码复用问题,多态解决程序拓展问题,二者结合是Java面向对象编程的重中之重。日常开发中实体类抽取父类、业务接口统一调度、框架底层源码大量运用继承与多态,吃透这部分知识点,才能真正迈入Java进阶开发行列。
后续会持续更新Java接口、抽象类、内部类、static/final高级特性,喜欢可以点赞收藏关注,一起深耕Java后端技术!