如下代码配套视频:《26. 继承|代码复用,类的层级设计》
26.1 类的继承
Animal.java
package com.inheritance.demo1;
/**
* @author 今日头条:老陈说编程
* 定义动物类,作为所有动物的基类
*/
public class Animal {
// 动物名称,子类可以直接访问
protected String name;
// 动物编号,子类可以直接访问
protected int num;
/**
* 构造函数,初始化动物的基本信息
* @param name 动物名称
* @param num 动物编号
*/
public Animal(String name, int num) {
this.name = name;
this.num = num;
// 输出动物名称和编号信息
System.out.println(name+"的编号:"+num);
}
/**
* 定义动物进食行为
* 具体吃什么由子类实现
*/
public void eat() {
System.out.println(this.name+"吃什么?");
}
}
Dog.java
package com.inheritance.demo1;
/**
* @author 今日头条:老陈说编程
* 狗类,继承自动物类
*/
public class Dog extends Animal {
/**
* 默认构造函数
* 调用父类构造函数,设置狗的名称为"狗",编号为123456
*/
public Dog() {
super("狗", 123456);
}
/**
* 程序入口点
* 创建Dog类的实例
* @param args 命令行参数
*/
public static void main(String[] args) {
// 创建一个Dog对象,会自动调用父类的构造函数
Dog dog = new Dog();
dog.eat();
}
}
26.2 接口继承
Switchable.java
package com.inheritance.demo2;
/**
* @author 今日头条:老陈说编程
* 定义接口:可开关的设备
*/
public interface Switchable {
// 开启设备的抽象方法
void turnOn();
// 关闭设备的抽象方法
void turnOff();
// 检查设备是否开启的抽象方法
boolean isOn();
}
SmartLight.java
package com.inheritance.demo2;
/**
* @author 今日头条:老陈说编程
* 智能灯类实现Switchable接口
*/
public class SmartLight implements Switchable {
// 灯的开关状态
private boolean isOn;
@Override
public void turnOn() {
isOn = true;
System.out.println("灯已打开,亮度100%");
}
@Override
public void turnOff() {
isOn = false;
System.out.println("灯已关闭");
}
@Override
public boolean isOn() {
return isOn;
}
}
SmartAC.java
package com.inheritance.demo2;
/**
* @author 今日头条:老陈说编程
* 智能空调类实现Switchable接口
*/
public class SmartAC implements Switchable {
// 空调的开关状态
private boolean isOn;
// 空调的温度设置,默认26度
private int temperature;
public SmartAC() {
this.temperature = 26;
}
@Override
public void turnOn() {
isOn = true;
System.out.println("空调已开启,当前温度:" + temperature + "°C");
}
@Override
public void turnOff() {
isOn = false;
System.out.println("空调已关闭");
}
@Override
public boolean isOn() {
return isOn;
}
// 空调特有的方法:设置温度
public void setTemperature(int temp) {
this.temperature = temp;
if (isOn) {
System.out.println("空调温度已调整为:" + temperature + "°C");
}
}
}
HomeController.java
package com.inheritance.demo2;
/**
* @author 今日头条:老陈说编程
* 家庭控制器类,用于控制各种智能设备
*/
public class HomeController {
// 控制任意可开关设备的方法
public void controlDevice(Switchable device, boolean on) {
if (on) {
device.turnOn();
} else {
device.turnOff();
}
}
// 检查设备状态的方法
public void checkStatus(Switchable device) {
System.out.println("设备状态:" + (device.isOn() ? "开启" : "关闭"));
}
}
Main.java
package com.inheritance.demo2;
/**
* @author 今日头条:老陈说编程
* 主类:测试接口和实现类的功能
*/
public class Main {
public static void main(String[] args) {
// 创建家庭控制器实例
HomeController controller = new HomeController();
// 创建设备实例,使用接口类型引用
Switchable light = new SmartLight();
Switchable ac = new SmartAC();
// 控制灯的开关
System.out.println("=== 控制灯 ===");
controller.controlDevice(light, true);
controller.checkStatus(light);
// 控制空调的开关和温度
System.out.println("\n=== 控制空调 ===");
controller.controlDevice(ac, true);
((SmartAC) ac).setTemperature(24); // 向下转型调用空调特有方法
controller.checkStatus(ac);
// 关闭所有设备
System.out.println("\n=== 关闭所有设备 ===");
controller.controlDevice(light, false);
controller.controlDevice(ac, false);
}
}
26.3 抽象类
Shape.java
package com.inheritance.demo3;
/**
* @author 今日头条:老陈说编程
* 抽象类:Shape(形状)
* 定义所有形状的通用属性和行为,提供抽象方法让子类实现具体逻辑
*/
abstract class Shape {
protected String color; // 形状颜色
// 构造方法初始化颜色
public Shape(String color) {
this.color = color;
}
// 获取颜色
public String getColor() {
return color;
}
// 抽象方法:计算面积(由子类实现)
public abstract double calculateArea();
// 抽象方法:绘制形状(由子类实现)
public abstract void draw();
}
Circle.java
package com.inheritance.demo3;
/**
* @author 今日头条:老陈说编程
* 子类:Circle(圆形)
* 继承自Shape,实现圆形的具体属性和方法
*/
class Circle extends Shape {
private double radius; // 圆半径
// 构造方法初始化颜色和半径
public Circle(String color, double radius) {
super(color);
this.radius = radius;
}
// 实现计算圆形面积的方法
@Override
public double calculateArea() {
return Math.PI * radius * radius;
}
// 实现绘制圆形的方法
@Override
public void draw() {
System.out.println("绘制一个" + color + "的圆形,半径为" + radius);
}
}
Rectangle.java
package com.inheritance.demo3;
/**
* @author 今日头条:老陈说编程
* 子类:Rectangle(矩形)
* 继承自Shape,实现矩形的具体属性和方法
*/
class Rectangle extends Shape {
private double width; // 矩形宽度
private double height; // 矩形高度
// 构造方法初始化颜色、宽度和高度
public Rectangle(String color, double width, double height) {
super(color);
this.width = width;
this.height = height;
}
// 实现计算矩形面积的方法
@Override
public double calculateArea() {
return width * height;
}
// 实现绘制矩形的方法
@Override
public void draw() {
System.out.println("绘制一个" + color + "的矩形,宽度为" + width + ",高度为" + height);
}
}
Main.java
package com.inheritance.demo3;
/**
* @author 今日头条:老陈说编程
* 主类:测试抽象类和子类的功能
*/
public class Main {
public static void main(String[] args) {
// 创建圆形对象并测试
Shape circle = new Circle("红色", 5.0);
System.out.println("圆形颜色:" + circle.getColor());
System.out.println("圆形面积:" + circle.calculateArea());
circle.draw();
// 创建矩形对象并测试
Shape rectangle = new Rectangle("蓝色", 4.0, 6.0);
System.out.println("\n矩形颜色:" + rectangle.getColor());
System.out.println("矩形面积:" + rectangle.calculateArea());
rectangle.draw();
}
}