类的继承

本文通过实验介绍了如何使用Java实现类的继承、抽象类和对象的向上转型。实验涉及创建抽象类Shape,核心类Centrun,以及继承自Shape的Circle、Rectangular和Triangle类。通过在Test包中实例化抽象类并调用相关函数,计算了圆锥、矩形棱锥和三棱锥的体积,展示了面向抽象编程的优势。

类的继承

实验目的:掌握类的继承、抽象类的定义和使用、对象的向上转型。
实验内容:已知若干图形,求以该图形为底的锥体的体积。
实验要求:用面向抽象的思想实现。
实验步骤:
1、程序总体框架
在这里插入图片描述
2.在shape包中创建抽象类Shape,代码如下:

package shape;

public abstract class Shape {
	public abstract double getArea();		//建立一个抽象类求Shape面积

}

3、在centrun包中创建一个类Centrun,代码如下:

package centrun;

import shape.Shape;

public class Centrun {
	short S1=1;
	float F1=(float) 3.4;
	double height;
	Shape shape;				
//此处未实例化对象,知识点:对象的向上转型
	public Centrun(){
		super();
	}

	public Centrun(double height,Shape shape) {
		super();
		this.height=height;
		this.shape=shape;
	}
	
	public double getVolume(){
		return (1.0/3)*shape.getArea()*this.height;	
//求椎体的体积,getArea将圆的面积算法单独作为一个类(Circle.java),便于代码的复用;
	}
}

Centrun这个类为核心类,在之后的代码编写中可以不做更改,getVolume函数用来求椎体的体积,即利用抽象类getArea进行适应性计算。
4、创建一个包myshape,在其中先创建一个Circle类,代码如下:

package myshape;

import shape.Shape;

public class Circle extends Shape{
	//Circle是对Shape类的继承
	private double r;
	public Circle(){
		super();
	}
	
	public Circle(double r){
		super();
	//对于以上的代码实际在子类的构造方法中隐含了一个super()的语法,此句加不加效果一样
		this.r=r;
	}
	//取得R属性
	public double getR(){
		return r;
	}
	//设置R属性
	public void setR(double r){
		this.r=r;
	}

	@Override
	public double getArea() {
		// TODO 自动生成的方法存根
		return Math.PI*this.r*this.r;
		//代码的重写,求圆的面积,公式为:S=π*r^2
	}
}

Circle是对抽象类shape的继承(记得导入shape包),在Circle类中,利用对getArea函数代码的重写操作,具体实现了求圆的面积这一操作。【此处的具体实现应该放入该图形的具体面积求法。】

5、创建一个包Test,对以上三个包中的代码进行具体实现,代码如下:

在这里插入图片描述
导入myshape包,在main函数中通过向上转型,实例化shape包中的抽象类Shape,然后调用函数输出圆锥的体积。

6、在求出实验结果1,即调试好shape、myshape、centrun这三个包后,不再更改shape、centrun包,而是在myshape包下新建所需的类,如本次实验所需的三角形、矩形;

7、在myshape包下创建一个类Rectangular,代码如下:

package myshape;

import shape.Shape;

public class Rectangular extends Shape{			//继承shape
	private double width;
	private double height;
	
	public Rectangular(){
		super();
	}
	
	public Rectangular(double width,double height){
		super();
		this.width=width;
		this.height=height;
	}

	@Override
	public double getArea() {
		// TODO 自动生成的方法存根
		return width*height;
		//矩形面积等于宽乘以高
	}
}

8、在myshape包下创建一个类Triangle,需注意的是,求三角形的面积需要判断三角形的三边能否构成三角形(不能构成时返回0),代码如下:

package myshape;

import shape.Shape;

public class Triangle extends Shape{            
	    double a;
		double b;
		double c;
		double m;
		//空参构造函数
		public Triangle() {
			super();
		}
		
		public Triangle(double a, double b, double c) {
			super();
			this.a = a;
			this.b = b;
			this.c = c;
		}
		
		public double getA(){
			return a;
		}
		
		public double getB(){
			return b;
		}
		
		public double getC(){
			return c;
		}
	
		@Override
		public double getArea() {
			// TODO 自动生成的方法存根
			if(a+b>=c&&a+c>=b&&b+c<=a)
				return 0;
			else 
			{			
			double m=(a+b+c)/2;
			double s=m*(m-a)*(m-b)*(m-c);
			return Math.sqrt(s);
			}
		}
}

实验结果:
1、Test测试包最终代码:

package test;

import myshape.Circle;
import myshape.Rectangular;
import myshape.Triangle;
import centrun.Centrun;

public class Test {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Circle circle=new Circle(4.0);
		Centrun centrun=new Centrun(10,circle);	
		//向上转型,实例化shape
		System.out.println(centrun.getVolume());
		//输出圆锥的体积
		Rectangular rect=new Rectangular(6,8);
		centrun=new Centrun(10,rect);
		System.out.println(centrun.getVolume());
		//输出四棱锥的体积(底面为矩形)
		Triangle triangle=new Triangle(15,4,5);
		centrun=new Centrun(10,triangle);
		System.out.println(centrun.getVolume());
		//输出三棱锥的体积
	}
}

2、圆锥体积
测试数据:半径=4.0,高=10
测试结果:求得圆锥的体积约为168;
在这里插入图片描述
3、四棱锥的体积(底面为矩形)
测试数据:宽=6,长=8,高=10;
测试结果:求得棱锥的体积为160.
在这里插入图片描述
4、三棱锥的体积
(1) 测试数据:三边分别为:3 4 5,高为10。
测试结果:求得三棱锥的体积为20.
(2) 测试数据:三边分别为:15 4 5,高为10。
测试结果:求得三棱锥的体积为0.
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会写代码的杰尼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值