花几千上万学习Java,真没必要!(二十四)

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();  
    }  
}

运行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值