Java 抽象类和接口示例:Shape 和 AuthorInfo
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 中的抽象类和接口有所帮助。
原文地址: https://www.cveoy.top/t/topic/nhB8 著作权归作者所有。请勿转载和采集!