Java 程序设计基础(第5章第2节)|类的继承
一、什么是继承
现实世界中事物存在上下级从属关系,程序里用继承来描述通用父类、独有子类的层级结构。
• 核心作用:抽取多个子类公共属性、公共方法放到父类,代码复用;
• Java语法:class 子类 extends 父类
• 硬性规则:Java只支持单继承,一个子类只能直接继承一个父类,但支持多级继承。
二、继承的具体实现
1. 父类与子类基础代码演示
// 父类:动物
class Animal {
String name;
public void eat() {
System.out.println("动物需要进食");
}
}
// 子类:狗,继承动物
class Dog extends Animal {
// 子类独有方法
public void bark() {
System.out.println("小狗汪汪叫");
}
}
测试调用:
public class TestExtends {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = "旺财";
dog.eat(); // 继承父类方法
dog.bark(); // 自身独有方法
}
}
运行结果:
动物需要进食
小狗汪汪叫
2. super关键字与构造方法执行顺序
子类构造方法执行时,会默认先调用父类无参构造super(),父类构造优先执行。
• super.成员变量:访问父类成员变量
• super.方法():调用父类成员方法
• super():调用父类构造方法,必须放在子类构造首行
三、方法重写(Override)
子类对父类继承过来的方法实现逻辑不满意,可以重新编写方法体,这就是方法重写。
1. 重写硬性规则
1. 方法名、参数列表、返回值类型(协变)必须和父类一致;
2. 访问权限不能比父类更严格(父类public,子类不能改成private);
3. 不能抛出比父类更大范围的异常;
4. 建议加@Override注解,编译器自动校验是否合法重写。
2. 重写代码示例
class Animal {
public void eat() {
System.out.println("动物进食");
}
}
class Cat extends Animal {
@Override
public void eat() {
System.out.println("小猫吃鱼");
}
}
四、继承与类型转换
分为向上转型(自动转换)、向下转型(强制转换)。
1. 向上转型(多态基础)
父类引用指向子类对象,自动完成,安全无异常。
格式:父类 引用名 = new 子类();
特点:只能调用父类中定义的方法,无法直接调用子类独有方法。
Animal a = new Dog(); // 向上转型
a.eat();
2. 向下转型(强制转换)
想要调用子类独有方法,必须强转回子类类型,有ClassCastException类型转换异常风险,建议配合instanceof判断。
Animal a = new Dog();
if(a instanceof Dog) {
Dog d = (Dog)a;
d.bark();
}
五、实用案例完整整合
整合继承、重写、转型、super全部知识点,可直接复制运行。
public class ExtendsDemo {
public static void main(String[] args) {
// 向上转型
Animal ani = new Dog("大黄");
ani.eat();
// 向下强制转型
if(ani instanceof Dog) {
Dog dog = (Dog) ani;
dog.bark();
}
}
}
class Animal {
String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + "正在吃东西");
}
}
class Dog extends Animal {
public Dog(String name) {
super(name); // 调用父类构造
}
@Override
public void eat() {
System.out.println(name + "啃骨头");
}
public void bark() {
System.out.println(name + "汪汪叫");
}
}
六、高频易错点总结
1. private私有成员无法被子类继承;
2. static静态方法重写不是真正重写,属于方法隐藏;
3. 向下转型不加instanceof极易报类型转换异常;
4. 构造方法不能被继承、不能重写。
更多推荐

所有评论(0)