java_SSD3_实验报告_抽象类和接口

第一题

【三角形类】设计一个扩展自抽象类GeometriObject的新的Triangle类。绘制Triangle类和GeometricObject类的UML图并实现Triangle类。编写一个测试程序,提示用户输入三角形的三条边、一种颜色以及一个表明该三角形是否填充的布尔值。程序应该根据用户的输入,使用这些边以及颜色和是否填充的信息,创建一个Triangle对象。程序应该显示面积、周长、颜色以及真或者假来表明是否被填充。

(1)UML图

java_SSD3_实验报告_抽象类和接口_第1张图片

(2)运行结果与结果分析

测试一:
java_SSD3_实验报告_抽象类和接口_第2张图片
通过计算可得周长与面积分别为12和6
测试二:
java_SSD3_实验报告_抽象类和接口_第3张图片
由于第一次输入的三条边15+17<80,故三条边无法构成三角形,重新输入后经计算无误。

(3)心得体会

此题为抽象类的简单运用,相对于下两道题较为基础,值得注意的是三角形三边关系,无法构成三角形时需要重新输入

(4)源代码

Program1:

package 实验8;

import java.util.Scanner;

public class Program1 {
     

	public static void main(String[] args) {
     
		Scanner input = new Scanner(System.in);
		double side1=0;
		double side2=0;
		double side3=0;
		String color;
		boolean flag = true;
		while(flag){
     
			System.out.println("请分别输入三角形的三条边");
			side1 = input.nextDouble();
			side2 = input.nextDouble();
			side3 = input.nextDouble();
			if(side1+side2>side3&&side1+side3>side2&&side2+side3>side1) flag = false;
			else System.out.println("您输入的三条边无法构成三角形,请重新输入");
		}
		Triangle triangle = new Triangle(side1,side2,side3);
		System.out.println("请分别输入三角形的颜色");
		color = input.next();
		triangle.setColor(color);
		System.out.println("请输入三角形是否被填充(1代表已填充,0代表未填充)");
		int flag2 = input.nextInt(); 
		if(flag2==0) triangle.isFilled(false);
		else if(flag2==1) triangle.isFilled(true);
		System.out.println(triangle.toSting());
	}

}

GeometicObject类:

package 实验8;

public abstract class GeometricObject {
     
	String color;
	boolean isFilled;
	protected GeometricObject(){
     
		
	}
	protected GeometricObject(String color,boolean isFilled){
     
		this.color = color;
		this.isFilled = isFilled;
	}
	public void setColor(String color){
     
		this.color = color;
	}
	public String getColor(){
     
		return color;
	}
	public void isFilled(boolean isFilled){
     
		this.isFilled = isFilled;
	}
	public boolean isFilled(){
     
		return isFilled;
	}
	public String toString(){
     
		return "颜色:"+color+" 是否被填充:"+isFilled;
	}
	public abstract double getPerimeter();
	public abstract double getArea();
}

Triangle类:

package 实验8;

public class Triangle extends GeometricObject{
     
	
	double side1;
	double side2;
	double side3;
	
	public Triangle(){
     
		
	}
	public Triangle(double side1,double side2,double side3){
     
		this.side1 = side1;
		this.side2 = side2;
		this.side3 = side3;
	}
	public double getPerimeter() {
     
		return side1+side2+side3;
	}
	public double getArea() {
     
		double p = (side1+side2+side3)/2.0;
		double s = Math.sqrt(p*(p-side1)*(p-side2)*(p-side3));
		return s;
	}
	public String toSting(){
     
		return "三角形的颜色为:"+color+" 是否被填充:"+isFilled+" 周长:"+getPerimeter()+" 面积:"+getArea();
	}
}

第二题

【ComparableCircle类】创建名为ComparableCircle的类,它继承自Circle类,并实现Comparable接口。画出UML图并实现compareTo方法,使其根据面积比较两个圆。编写一个测试程序求出ComparableCircle对象的两个实例中的较大者。

(1)UML图

java_SSD3_实验报告_抽象类和接口_第4张图片

(2)运行结果

测试一:
在这里插入图片描述
测试二:
在这里插入图片描述
测试三:

在这里插入图片描述

(3)结果分析

比较的是半径,结果不难看出

(4)心得体会

弄清楚各个类之间的关系尤为重要,然后也要弄清楚接口中抽象类方法的定义与接口的实现。

(5)源代码

Program2:

package 实验8;

import java.util.Scanner;

public class Program2 {
     
	
	public static void main(String[] args){
     
		Scanner input = new Scanner(System.in);
		double radius1 = input.nextDouble();
		double redius2 = input.nextDouble();
		//采用有参构造函数创建一个半径为radius1的圆
		Circle circle1 = new Circle(radius1);
		//采用有参构造函数创建一个半径为redius2的ComparableCirlce对象,并传入circle1作比较
		ComparableCircle circle2 = new ComparableCircle(circle1,redius2);
		circle2.compareTo(circle1);
	}
}

Circle类:

package 实验8;

public class Circle{
     
	public static double PI = 3.14;
	double radius;
	Circle(){
     
		radius = 1;
	}
	Circle(double radius){
     
		this.radius = radius;
	}
	public void setRadius(){
     
		this.radius = radius;
	}
	public double getRadius(){
     
		return radius;
	}
	public double getPerimeter(){
     
		return 2*PI*radius;
	}
	public double getArea(){
     
		return radius*PI*PI;
	}
}

ComparableCircle类:

package 实验8;

public class ComparableCircle extends Circle implements Comparable{
     
	Circle circle1;
	ComparableCircle(Circle circle1,double radius){
     
		this.circle1 = circle1;
		this.radius = radius;
	}
	@Override
	public void compareTo(Circle circle1) {
     
		// TODO Auto-generated method stub
		this.circle1 = circle1;
		if(circle1.radius>radius) System.out.println("circle1>circle2");
		else if(circle1.radius==radius) System.out.println("circle1=circle2");
		else System.out.println("circle1);
	}
	
}
Comparable接口:
package 实验8;

public interface Comparable {
     
	public void compareTo(Circle circle1);
}

第三题

可着色接口Colorable】设计一个名为Colorable的接口,其中有名为howToColor()的void方法。可着色对象的每个类必须实现Colorable接口。设计一个扩展GeometricObject类并实现Colorable接口的名为Square的类。实现howToColor方法,显示消息“给所有的四条边着色”。
画出包含Colorable、Square和GeometricObject的UML图。编写一个测试程序,创建有五个GeometricObject对象的数组。对于数组中的每个对象而言,如果对象是可着色的,那就调用howToColor方法。

(1)UML图

java_SSD3_实验报告_抽象类和接口_第5张图片

(2)运行结果

在这里插入图片描述

(3)结果分析

第二个和第五个为Square的对象,只有Square类实现了Colorable接口,故只有这两个可着色

(4)心得体会

本题是对接口的进一步运用,完成此题必须要理
解清楚各类之间的关系,另外注意此题直接用了第一题中的GeometricObject类,故也必须重写此抽象类中的抽象方法。

(5)源代码

Program3:

package 实验8;

public class program3 {
     

	public static void main(String[] args) {
     
		// TODO Auto-generated method stub
		
		GeometricObject[] geometricObject ={
     new Triangle(),new Square(),new Triangle(),new Triangle(),new Square()};
		for(int i=0;i<5;i++){
     
			if(geometricObject[i] instanceof Colorable){
     
				System.out.println("geometricObject"+(i+1)+"是可着色的");
			}
		}
	}

}

GeometricObject类同第一题不赘述
Square类:

package 实验8;

public class Square extends GeometricObject implements Colorable{
     

	@Override
	public void howToColor() {
     
		// TODO Auto-generated method stub
	}

	@Override
	public double getPerimeter() {
     
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public double getArea() {
     
		// TODO Auto-generated method stub
		return 0;
	}
	
}

Colorable接口:

package 实验8;

public interface Colorable {
     
	public void howToColor();
}

你可能感兴趣的:(java实验报告,java)