目录
- 什么是继承?
- Java 继承的基本语法
- 继承的特点
super
关键字- 方法重写(Override)
- 继承的构造方法调用
final
关键字与继承- 多层继承与类层次结构
- 抽象类与继承
- 接口与继承的区别
- 参考资料
- 出站链接
1. 什么是继承?
继承(Inheritance) 是面向对象编程(OOP)中的一个重要概念,允许**一个类(子类)继承另一个类(父类)**的属性和方法,提高代码复用性。
继承的优点:
- 代码复用:减少冗余代码,提高维护性。
- 可扩展性:通过子类扩展父类功能。
- 增强可读性:建立清晰的类层次结构。
2. Java 继承的基本语法
语法: 使用 extends
关键字
class 父类 { }
class 子类 extends 父类 { }
例子:
// 父类
class Animal {
String name = "动物";
void makeSound() {
System.out.println("动物发出声音");
}
}
// 子类继承 Animal
class Dog extends Animal {
void bark() {
System.out.println(name + ":汪汪汪!");
}
}
public class InheritanceExample {
public static void main(String[] args) {
Dog dog = new Dog();
dog.makeSound(); // 继承父类方法
dog.bark(); // 子类新方法
}
}
输出:
动物发出声音
动物:汪汪汪!
3. 继承的特点
- Java 只支持单继承(一个子类只能继承一个父类)。
- 支持多层继承(子类可以继续作为父类被继承)。
- 子类继承父类的所有非私有成员(
private
不可继承)。 - 子类可以重写父类的方法(使用
@Override
注解)。
4. super
关键字
super
关键字用于调用父类的构造方法或方法。
例子:调用父类方法
class Animal {
void makeSound() {
System.out.println("动物叫声");
}
}
class Dog extends Animal {
void makeSound() {
super.makeSound(); // 调用父类方法
System.out.println("狗叫:汪汪!");
}
}
public class SuperExample {
public static void main(String[] args) {
Dog dog = new Dog();
dog.makeSound();
}
}
输出:
动物叫声
狗叫:汪汪!
5. 方法重写(Override)
子类可以重写父类的方法,修改实现逻辑。
重写规则:
- 方法名相同,参数列表相同。
- 返回值不能比父类更严格(但可以是父类返回类型的子类)。
- 访问权限不能更严格(如父类
protected
,子类不能改为private
)。 - 必须使用
@Override
注解(可选,但推荐)。
例子:
class Animal {
void makeSound() {
System.out.println("动物叫声");
}
}
class Cat extends Animal {
@Override
void makeSound() {
System.out.println("猫叫:喵喵!");
}
}
public class OverrideExample {
public static void main(String[] args) {
Animal cat = new Cat();
cat.makeSound(); // 调用子类重写的方法
}
}
输出:
猫叫:喵喵!
6. 继承的构造方法调用
子类的构造方法默认会调用父类的无参构造方法,如果父类没有无参构造,则必须使用 super()
调用父类的构造方法。
例子:
class Parent {
Parent() {
System.out.println("父类构造方法");
}
}
class Child extends Parent {
Child() {
super(); // 显式调用父类构造方法
System.out.println("子类构造方法");
}
}
public class ConstructorExample {
public static void main(String[] args) {
new Child();
}
}
输出:
父类构造方法
子类构造方法
7. final
关键字与继承
修饰符 | 作用 |
---|---|
final 类 | 不能被继承 |
final 方法 | 不能被子类重写 |
final 变量 | 变为常量,不能被修改 |
例子:
final class Animal { } // 无法继承
class Dog extends Animal { } // 编译错误
class Parent {
final void show() {
System.out.println("父类方法");
}
}
class Child extends Parent {
void show() { // 编译错误,不能重写 final 方法
System.out.println("子类方法");
}
}
8. 多层继承与类层次结构
class Animal {
void eat() {
System.out.println("动物吃食物");
}
}
class Mammal extends Animal {
void walk() {
System.out.println("哺乳动物行走");
}
}
class Human extends Mammal {
void speak() {
System.out.println("人类会说话");
}
}
public class MultiLevelExample {
public static void main(String[] args) {
Human human = new Human();
human.eat();
human.walk();
human.speak();
}
}
9. 抽象类与继承
抽象类(abstract
) 不能实例化,子类必须实现其 abstract
方法。
abstract class Animal {
abstract void makeSound();
}
class Dog extends Animal {
void makeSound() {
System.out.println("狗叫:汪汪!");
}
}
public class AbstractExample {
public static void main(String[] args) {
Animal dog = new Dog();
dog.makeSound();
}
}
10. 接口与继承的区别
特性 | 继承(extends) | 接口(implements) |
---|---|---|
继承数 | 单继承 | 多实现 |
是否包含实现 | 可继承具体方法 | 只能声明方法 |
关键字 | extends | implements |
主要作用 | 代码复用 | 规范约束 |
发表回复