学习笔记07从零开始学java-第八章课后习题

学习笔记07-第八章 多态

用书参考:孙连英,刘畅,彭涛所著的Java面向对象程序设计。

我的所有代码你都可以通过GitHub获取,
以下为我的GitHub地址:[[[https://github.com/MrNeoJeep/java-code.git]]](

编写一个完整的Java Application程序,包含接口ShapeArea。Circle类,test类

具体要求如下

1、接口Shape

接口方法:

double getArea():求一个形状的面积

double getPerimeter():求一个形状的周长

2、Circle类

实现Shape接口,并有以下的属性和方法:

属性有radius:double类型,表示圆的半径

方法:

circle(double r):构造函数

toString()方法:输出圆的描述信息,,如radius = 1.0,perimeter = 6.28

area = 3.14

3、Test类作为主类要完成测试功能

生成circle对象

调用对象的tostring的方法,输出对象的描述信息

4、调用形状类,增加一个Square类,然后由产生的随机数决定生成形状的种类,如果是奇数

就生成一个circle对象,偶数生成一个Square对象。将生成的对象赋值给Shape接口句柄

,计算输出该形状的周长面积。

编写如下方法完成上述功能

public static void testShape(shape shape)

把该方法与下列重载的方法进行比较:

public static void testShape(circle circle)

public static void testShape(square square)

考虑:如果再增加几种具体的形状类,实现上述功能的两种方式应该如何处理新增加的形状类

代码

public class Text8_1 {

	public static void main(String[] args) {
		/*编写一个完整的Java Application程序,包含接口ShapeArea。Circle类,test类
		 * 具体要求如下
		 * 1、接口Shape
		 * 接口方法:
		 * double getArea():求一个形状的面积
		 * double getPerimeter():求一个形状的周长
		 * 2、Circle类
		 * 实现Shape接口,并有以下的属性和方法:
		 * 属性有radius:double类型,表示圆的半径
		 * 方法:
		 * circle(double r):构造函数
		 * toString()方法:输出圆的描述信息,,如radius = 1.0,perimeter = 6.28
		 * area = 3.14
		 * 3、Test类作为主类要完成测试功能
		 * 生成circle对象
		 * 调用对象的tostring的方法,输出对象的描述信息
		 * 4、调用形状类,增加一个Square类,然后由产生的随机数决定生成形状的种类,如果是奇数
		 * 就生成一个circle对象,偶数生成一个Square对象。将生成的对象赋值给Shape接口句柄
		 * ,计算输出该形状的周长面积。
		 * 编写如下方法完成上述功能
		 * public static void testShape(shape shape)
		 * 把该方法与下列重载的方法进行比较:
		 * public static void testShape(circle circle)
		 * public static void testShape(square square)
		 * 
		 * 考虑:如果再增加几种具体的形状类,实现上述功能的两种方式应该如何处理新增加的形状类
		 * */
		Test t1 = new Test();
		t1.test();
		t1.testShape(t1.choice());

	}

}
//编写Test类
class Test
{
	public void test()
	{
		Circle c1 = new Circle(5);
		String string = c1.toString();
		System.out.println(string);
	}
	public Shape choice()
	{
		int num = (int)(Math.random()*100);
		if(num % 2 == 0)
		{
			Square s = new Square(2, 3);
			return s;
		}
		else {
			Circle c = new Circle(4);
			return c;
		}
	}
	public static void testShape(Shape shape)
	{
		String string = shape.toString();
		System.out.println(string);
	}
}
//增加Square类
class Square implements Shape
{
	private double c;
	private double k;
	public Square(double c,double k) {
		this.c = c;
		this.k = k;
	}
	
	public double getArea()
	{
		return c*k;
	}
	public double getPerimeter()
	{
		return 2*c+2*k;
	}
	public String toString()
	{
		return "方形的长为:"+ this.c+"方形的宽为:"+this.k+"方形的周长:"+this.getPerimeter()+"方形的面积:"+this.getArea();
	}
}
//Circle类
class Circle implements Shape
{
	
	private double radius; //圆的半径
	public Circle(double r) {
		this.radius = r;
	}
	public double getArea()
	{
		double s ;
		s = Math.PI*this.radius*this.radius;
		return s;
	}
	public double getPerimeter()
	{
		double l;
		l = 2*Math.PI*this.radius;
		return l;
	}
	public String toString()
	{
		return "圆的半径:"+this.radius+"圆的周长是:"+this.getPerimeter()+"圆的面积:"+this.getArea();
	}
}

//接口shape
interface Shape
{
	double getArea();
	double getPerimeter();
	
}

运行结果

在这里插入图片描述
在这里插入图片描述

初学java,代码多有不足,如有错误,非常感谢你的指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值