1、抽象类:
测试代码:
package abstractclasstest.com;
abstract class Flower {
protected String color; // 花的颜色
protected int petalCount; // 花瓣数量
// 构造方法,可以被子类调用
public Flower(String color, int petalCount) {
this.color = color;
this.petalCount = petalCount;
}
// 抽象方法,需要被子类实现
abstract void describe();
// 非抽象方法,用于输出花的基本信息
void printBasicInfo() {
System.out.println("Color: " + color + ", Petal Count: " + petalCount);
}
}
class Rose extends Flower {
// Rose特有的香味描述
private String fragrance;
// 构造方法
public Rose(String color, int petalCount, String fragrance) {
super(color, petalCount);
this.fragrance = fragrance;
}
// 实现抽象方法
@Override
void describe() {
System.out.println("This is a " + color + " rose with " + petalCount + " petals.");
if (fragrance != null) {
System.out.println("It has a strong fragrance of " + fragrance + ".");
}
}
}
class Lily extends Flower {
// 构造方法
public Lily(String color, int petalCount) {
super(color, petalCount);
}
// 实现抽象方法
@Override
void describe() {
System.out.println("This is a " + color + " lily with " + petalCount + " petals.");
System.out.println("Lilies are often associated with purity and innocence.");
}
}
public class TestFlower {
public static void main(String[] args) {
Flower rose = new Rose("Red", 12, "roses");
Flower lily = new Lily("White", 6);
// 调用方法
rose.describe();
rose.printBasicInfo();
lily.describe();
lily.printBasicInfo();
}
}
运行结果如下:
2、接口:
测试代码:
1、定义一个打印接口:
package abstractclass.com;
//定义一个名为PrintTask的接口,它包含一个execute()方法。
public interface PrintTask {
// 定义一个方法,用于执行打印任务
void execute();
}
2、定义一个图片打印类:
package abstractclass.com;
//ImagePrinter类实现PrintTask接口
public class ImagePrinter implements PrintTask {
@Override
public void execute() {
System.out.println("Printing image...");
//添加打印图像的具体逻辑
}
}
3、定义一个文件打印类:
package abstractclass.com;
//DocumentPrinter类实现PrintTask接口
public class DocumentPrinter implements PrintTask {
@Override
public void execute() {
System.out.println("Printing document...");
//添加打印文档的具体逻辑
}
}
4、在主方法中测试:
package abstractclass.com;
//通过PrintTask接口的引用来调用execute()方法。
public class PrintDemo {
public static void main(String[] args) {
// 创建DocumentPrinter对象
PrintTask documentTask = new DocumentPrinter();
// 调用DocumentPrinter的execute方法
documentTask.execute();
// 创建ImagePrinter对象
PrintTask imageTask = new ImagePrinter();
// 调用ImagePrinter的execute方法
imageTask.execute();
}
}
运行结果如下:
2、抽象类和接口的混合使用:
1、定义一个接口:
package extendtest.com;
//定义一个接口Shape,代表一个几何形状具有的特点。
public interface Shapes {
// 定义了一个方法,用于计算形状的面积
double calculateArea();
}
2、定义一个抽象类:
package extendtest.com;
//定义一个抽象类GeometricObject,包含一些几何对象共有的属性和方法,但本身不能实例化(因为它包含了一个抽象方法)。
public abstract class GeometricObject {
// 几何对象的一个共有属性
protected String description;
// 构造方法
public GeometricObject(String desc) {
description = desc;
}
// 一个具体方法,用于显示描述
public void display() {
System.out.println(description);
}
// 一个抽象方法,要求子类实现
public abstract double getArea();
}
3、 Circle类,实现Shapes接口并继承GeometricObject 类:
package extendtest.com;
//Circle类,实现Shapes接口并继承GeometricObject
public class Circles extends GeometricObject implements Shapes {
private double radius;
public Circles(double radius, String desc) {
super(desc);
this.radius = radius;
}
// 实现Shape接口的calculateArea方法
@Override
public double calculateArea() {
return Math.PI * radius * radius;
}
// 实现GeometricObject抽象类的getArea方法
@Override
public double getArea() {
return calculateArea();
}
}
4、Rectangles类,实现Shapes接口并继承GeometricObject
package extendtest.com;
//Rectangles类,实现Shapes接口并继承GeometricObject
public class Rectangles extends GeometricObject implements Shapes {
private double width;
private double height;
public Rectangles(double width, double height, String desc) {
super(desc);
this.width = width;
this.height = height;
}
// 实现Shape接口的calculateArea方法
@Override
public double calculateArea() {
return width * height;
}
// 实现GeometricObject抽象类的getArea方法
@Override
public double getArea() {
return calculateArea();
}
}
5、测试代码:
package extendtest.com;
public class TestDemo {
public static void main(String[] args) {
Shapes circle = new Circles(5, "Circle with radius 5");
Shapes rectangle = new Rectangles(4, 5, "Rectangle with width 4 and height 5");
// 调用Shapes接口中的方法
System.out.println("Circle area: " + circle.calculateArea());
System.out.println("Rectangle area: " + rectangle.calculateArea());
// 如果Circles和Rectangles也继承了GeometricObject并提供了display方法
//也可以这样调用
((GeometricObject)circle).display();
((GeometricObject)rectangle).display();
}
}
运行结果如下: