Java 抽象类和接口示例:Shape 和 AuthorInfo

本示例演示了 Java 中抽象类和接口的使用,创建了 Shape 抽象类和 AuthorInfo 接口,并定义了 Circle 和 Rectangle 两个非抽象子类,它们继承了 Shape 抽象类并实现了 AuthorInfo 接口。代码示例包括抽象类、接口、子类实现、测试用例等,并提供了详细的代码注释和解释。

1. 创建抽象类 Shape

package cn.edu.seig.zhangxiaohu;
//抽象类多态的应用示例

public abstract class Shape {							//Shape为抽象类
	public abstract String getTypeInfo();		//抽象方法,获取Shape的类型信息
	public abstract String getAreaInfo();		//抽象方法,获取面积信息
	public abstract String getPerimeterInfo();	//抽象方法,获取周长信息
}

2. 创建接口 AuthorInfo

package cn.edu.seig.zhangxiaohu;
public interface AuthorInfo  {	//接口,提供创建者信息
String getAuthorInfo();
}

3. 创建抽象类 Shape 的子类 Circle

package cn.edu.seig.zhangxiaohu;
public class Circle extends Shape implements AuthorInfo  {
//Circle类继承了Shape抽象类,实现AuthorInfo  接口
	private int radius;	//定义一个int类型的私有成员变量,命名为radius,表示圆半径
	public Circle(int r){
		this.radius = r;	//利用形式参数 r初始化成员变量radius
	}
	//实现抽象方法 getTypeInfo()
	public String getTypeInfo(){
		return '类型:圆,半径:'+radius;
	}
//实现获取面积的抽象方法
	public String getAreaInfo() {
		return '面积:'+Math.PI*radius*radius;
	}
	//实现获取周长抽象方法
	public String getPerimeterInfo() {
		return '周长:'+2*Math.PI*radius;
	}	
	public String getAuthorInfo(){
		return '作者:张小虎'; //替换为自己的姓名,否则影响得分
	}
}

4. 创建抽象类 Shape 的子类 Rect

package cn.edu.seig.zhangxiaohu;
class Rect extends Shape implements AuthorInfo {	
//子类Rect类继承了Shape抽象类,实现AuthorInfo  接口
	private int length;	//定义一个int类型的私有成员变量,命名为length,表示矩形的长
	private int width;	//定义一个int类型的私有成员变量,命名为width,,表示矩形的宽

	public Rect(int l, int w){
		this.length = l;
		this.width = w;	//利用形式参数 l、w分别初始化长、宽成员变量
	}
	//实现抽象方法 getTypeInfo()
	public String getTypeInfo(){
		return '类型:矩形,'+length+'x'+width;
	}
	public String getPerimeter(){
		return '周长:'+2*(length + width);
	}
	public String getAreaInfo(){
		return '面积:'+length*width;
	}
	public String getPerimeterInfo() {
		return '周长:'+2*(length + width);
	}
	public String getAuthorInfo(){
		return '作者:张小虎'; //替换为自己的姓名,否则影响得分
	}
}

5. 在主类的入口函数中添加测试代码

package cn.edu.seig.zhangxiaohu;
public class MyApp {
	public static void main(String[] args) {
		Shape shapes[] = new Shape[6];
		Circle c1 = new Circle(50);  //实例化半径为10的圆
		Shape c2 = new Circle(100);  //实例化半径为20的圆
		AuthorInfo c3 = new Circle(200);  //实例化半径为30的圆

		Shape r1 = new Rect(100,100);
		Rect r2 = new Rect(180,160);
		AuthorInfo r3 = new Rect(200,240); 

		int pos = 0;
		shapes[pos++]=c1;
		shapes[pos++]=r1;
		shapes[pos++]=r2;
		shapes[pos++]=c2;
		shapes[pos++]=(Shape)c3;  //(17)_______________为什么此处和下一行需要强制类型转换
		shapes[pos++]=(Shape)r3;  

		pos = 1;
		for (Shape s : shapes ) {
			System.out.print('第'+pos+'个形状:'+s.getTypeInfo()+',');	
			System.out.print(((AuthorInfo)s).getAuthorInfo()+',');	
			System.out.print(s.getPerimeterInfo()+',');	
			System.out.print(s.getAreaInfo());
			System.out.println();	
			pos++;
		}
	}
}

解释:

  • 抽象类: Shape 类是一个抽象类,它包含抽象方法,但没有具体实现。子类需要继承抽象类并实现所有抽象方法。
  • 接口: AuthorInfo 是一个接口,它定义了 getAuthorInfo() 方法,但没有具体实现。类需要实现接口并提供方法的具体实现。
  • 子类实现: Circle 和 Rect 类分别继承了 Shape 抽象类并实现了 AuthorInfo 接口。它们提供了抽象方法的具体实现,并根据各自的属性计算面积和周长。
  • 强制类型转换: 在测试代码中,c3 和 r3 的类型是 AuthorInfo,而 shapes 数组要求元素类型为 Shape。因此需要将 c3 和 r3 强制转换为 Shape 类型。

代码运行结果:

该程序将输出每个形状的类型、作者信息、周长和面积。

总结:

本示例展示了 Java 中抽象类和接口的基本用法,以及它们如何实现多态。抽象类和接口是面向对象编程中的重要概念,它们可以提高代码的可维护性和可扩展性。

注意:

  • 请根据自己的实际情况修改代码中的作者信息。
  • 在实际应用中,可以根据需要定义更多的抽象类和接口,以及更复杂的子类实现。

希望本示例对您理解 Java 中的抽象类和接口有所帮助。

Java 抽象类和接口示例:Shape 和 AuthorInfo

原文地址: https://www.cveoy.top/t/topic/nhB8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录