super关键字:
测试代码1:
创建一个Animal类:
package extendtest.com;
public class Animal {
String name;
// 父类的构造方法
public Animal(String name) {
this.name = name;
}
// 父类的一个方法
public void eat() {
System.out.println(name + " eats food.");
}
}
创建一个Dog类:
package extendtest.com;
public class Dog extends Animal {
// Dog类特有的方法
public void bark() {
System.out.println(name + " barks.");
}
// Dog类可以调用父类的构造方法(显式调用)
// 在子类的构造方法中,可以通过super关键字调用父类的构造方法
// 如果不显式调用,则默认调用父类的无参构造方法
public Dog(String name) {
super(name); // 显式调用父类的构造方法
}
// 重写父类的方法
@Override
public void eat() {
// 调用父类的eat方法
// super.eat();
System.out.println(name + " eats dog food.");
}
}
在主方法中测试:
package extendtest.com;
public class InheritanceDemo {
public static void main(String[] args) {
// 创建Dog对象
Dog myDog = new Dog("Buddy");
// 调用Dog类继承自Animal类的方法
myDog.eat();
// 调用Dog类特有的方法
myDog.bark();
}
}
运行结果如下:
测试代码2:
创建一个化妆品类:
package extendtest.com;
import java.time.LocalDate;
//化妆品类
public class Cosmetic {
String brand; // 品牌
String type; // 类型
// 假设一个简单的过期日期
LocalDate expirationDate;
// 构造方法
public Cosmetic(String brand, String type, LocalDate expirationDate) {
this.brand = brand;
this.type = type;
this.expirationDate = expirationDate;
}
// 显示化妆品信息的方法
public void displayInfo() {
System.out.println("Brand: " + brand + ", Type: " + type);
}
// 检查是否过期的方法
public boolean isExpired() {
LocalDate today = LocalDate.now();
return today.isAfter(expirationDate);
}
}
创建一个口红类:
package extendtest.com;
import java.time.LocalDate;
//口红类,继承自化妆品类
public class Lipstick extends Cosmetic {
String shade; // 色号
String finish; // 质地
// 构造方法
public Lipstick(String brand, String type, String shade, String finish, LocalDate expirationDate) {
super(brand, type, expirationDate); // 调用父类的构造方法
this.shade = shade;
this.finish = finish;
}
// 重写displayInfo方法以包含更多信息
@Override
public void displayInfo() {
super.displayInfo(); // 调用父类的displayInfo方法
System.out.println("Shade: " + shade + ", Finish: " + finish);
}
// 口红特有的方法:涂抹口红
public void apply() {
if (!isExpired()) {
System.out.println("Applying " + brand + " " + shade + " lipstick...");
} else {
System.out.println("This lipstick is expired and should not be applied!");
}
}
// 检查是否过期的方法
@Override
public boolean isExpired() {
// 直接调用基类的实现,但也可以添加额外的逻辑
return super.isExpired();
}
}
在主方法中测试:
package extendtest.com;
import java.time.LocalDate;
//测试类
public class CosmeticDemo {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate expirationDate = today.minusMonths(6); // 假设口红已经过期6个月
// 创建Lipstick对象
Lipstick myLipstick = new Lipstick("MAC", "Matte Lipstick", "Velvet Teddy", "Matte", expirationDate);
// 检查口红是否过期
if (myLipstick.isExpired()) {
System.out.println(myLipstick.brand + " " + myLipstick.shade + " lipstick is expired.");
} else {
System.out.println(myLipstick.brand + " " + myLipstick.shade + " lipstick is not expired.");
}
// 尝试涂抹口红
myLipstick.apply();
}
}
运行结果如下:
测试代码3:
创建一个车辆类:
package extendtest.com;
public class Vehicle {
String brand; // 品牌
int wheels; // 轮子数量
// 构造方法
public Vehicle(String brand, int wheels) {
this.brand = brand;
this.wheels = wheels;
}
// 显示车辆信息的方法
public void displayInfo() {
System.out.println("Brand: " + brand + ", Wheels: " + wheels);
}
}
创建一个汽车类:
package extendtest.com;
public class Car extends Vehicle {
String model; // 型号
// 构造方法,同时调用父类的构造方法
public Car(String brand, int wheels, String model) {
super(brand, wheels); // 调用父类的构造方法
this.model = model;
}
// 重写displayInfo方法以包含更多信息
@Override
public void displayInfo() {
super.displayInfo(); // 调用父类的displayInfo方法
System.out.println("Model: " + model);
}
// 汽车特有的方法,比如启动
public void startEngine() {
System.out.println("Engine started.");
}
}
在主方法中测试:
package extendtest.com;
public class InheritanceCarTest {
public static void main(String[] args) {
// 创建Car对象
Car myCar = new Car("Toyota", 4, "Corolla");
// 调用重写后的displayInfo方法
myCar.displayInfo();
// 调用Car类特有的方法
myCar.startEngine();
}
}
运行结果如下: