Java的继承机制允许子类复用父类的属性和方法,同时可以扩展自身独有的功能,是实现代码复用和多态的基础。继承的核心是通过extends关键字建立类之间的父子关系,而父类调用则依赖super关键字完成。

一、Java继承的基础实现
在Java中,一个类只能直接继承一个父类,继承的语法格式如下:
// 定义父类
class Parent {
String name = "父类名称";
public void sayHello() {
System.out.println("父类的方法:Hello");
}
}
// 子类通过extends继承父类
class Child extends Parent {
// 子类可以复用父类的属性和方法
}
上述代码中,Child类继承了Parent类,因此Child类的实例可以直接访问Parent类中定义的name属性和sayHello方法。
二、父类调用的核心:super关键字
super关键字用来在子类中引用父类的成员,包括构造方法、成员变量和成员方法,具体使用场景分为以下几种。
1. 调用父类构造方法
子类构造方法执行时,会默认先调用父类的无参构造方法,如果父类没有无参构造方法,就必须在子类构造方法的第一行显式使用super调用父类的有参构造。
class Parent {
String name;
// 父类有参构造,没有无参构造
public Parent(String name) {
this.name = name;
}
}
class Child extends Parent {
int age;
public Child(String name, int age) {
// 必须第一行调用父类构造方法
super(name);
this.age = age;
}
}
2. 访问父类成员变量
当子类中定义了和父类同名的成员变量时,使用super可以区分访问父类的变量。
class Parent {
String info = "父类的信息";
}
class Child extends Parent {
String info = "子类的信息";
public void printInfo() {
System.out.println("子类自己的info:" + info);
// 使用super访问父类的同名变量
System.out.println("父类的info:" + super.info);
}
}
3. 调用父类成员方法
当子类重写了父类的方法时,使用super可以在子类中调用父类的原方法实现。
class Parent {
public void show() {
System.out.println("父类的show方法");
}
}
class Child extends Parent {
// 重写父类的show方法
@Override
public void show() {
// 先调用父类的show方法
super.show();
System.out.println("子类扩展的show方法内容");
}
}
三、继承与方法重写的注意事项
方法重写要求子类方法的返回值类型、方法名、参数列表必须和父类方法完全一致,访问权限不能比父类更严格。如果需要在重写的方法中保留父类的逻辑,就可以通过super调用父类的方法。
另外需要注意,父类的private修饰的成员变量和方法无法被继承,因此也不能通过super访问,static修饰的静态方法也不支持重写,不存在父类调用的场景。
四、完整操作示例
以下是一个完整的继承与父类调用的示例,展示从定义父类到子类调用父类成员的全流程:
// 父类:动物类
class Animal {
protected String type;
public Animal(String type) {
this.type = type;
}
public void eat() {
System.out.println(type + "在吃东西");
}
}
// 子类:猫类,继承动物类
class Cat extends Animal {
private String name;
public Cat(String type, String name) {
// 调用父类构造方法
super(type);
this.name = name;
}
// 重写父类的eat方法
@Override
public void eat() {
// 调用父类的eat方法
super.eat();
System.out.println(name + "在吃猫粮");
}
public void printType() {
// 访问父类的type属性
System.out.println("这只猫的类型是:" + super.type);
}
}
public class Test {
public static void main(String[] args) {
Cat cat = new Cat("宠物猫", "小白");
cat.eat();
cat.printType();
}
}
运行上述代码会输出:
宠物猫在吃东西 小白在吃猫粮 这只猫的类型是:宠物猫
通过这个示例可以清晰看到继承的实现和父类调用的完整操作逻辑,开发者可以按照这个流程在实际项目中应用Java的继承机制。