实验三 继承与多态
1利用继承来设计一组用于几何图形处理的类。
- 定义几何图形类Shape,该类具有计算几何图形面积area()、周长perimeter(),以及返回几何图形信息toString()的方法。说明:Shape类是描述抽象的几何形状,所以其面积、周长以及toString()方法的方法体无法定义具体的语句仅设置return返回语句即可。
- 定义Shape的表示圆的子类——Circle,该类包含表征圆的属性,属性的setter和getter方法,创建和初始化对象的构造方法(体现重载)以及重写Shape的3个成员方法。
- 和getter方法,创建和初始化对象的构造方法(体现重载)以及重写Shape的3个成员方法。
- 最后定义测试类TestShape,用来测试上述设计的类中各个方法功能。
package Work3;
import java.util.Scanner;
import static java.lang.Math.*;
class Shape{//图形类
public double perimeter() {
return 1;
}//计算几何图形周长
public double area() {
return 1;
}//计算几何图形面积
public void setWidth(double newWidth){return ;}
public double getWidth(){return 1;}
public void setLength(double newLenth){return ;}
public double getLength(){return 1;}
public void setRadius(double newr){return ;}
public double getRadius(){return 1;}
}
//表示长方形的子类——Rectangle
class Rectangle extends Shape{
double length;//长
double width;//宽
public Rectangle(double length,double width) {//构建新的长方形
this.length=length;
this.width=width;
}
public double getLength() {
return length;
}//获得长
public void setLength(double newLenth) {
length = newLenth;
}//重置长
public double getWidth() {
return width;
}//获得宽
public void setWidth(double newWidth) {
width = newWidth;
}//重置宽
public double perimeter() {
return 2.0*(length+width);
}//输出周长
public double area() {
return length*width;
}//输出面积捏
@Override
public String toString() {
return "Rectangle{" +
"length=" + length +
", width=" + width +
'}';
}
}
//表示圆的子类——Circle
class Circle extends Shape{
double r;//半径
public Circle(double newr) {
r =newr;
}//构建一个新圆
//文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处
public double getRadius() {
return r;
}//获取半径
public void setRadius(double newr) {
r = newr;
}//重置半径
public double perimeter() {
return 2.0* PI* r;
}//算周长
public double area() {
return PI* r * r;
}//算面积
@Override
public String toString() {
return "Circle{" +
"r=" + r +
'}';
}
}
public class TestShape{
public static void main(String[] args) {
System.out.println("请输入长方形的长和宽,圆形的半径:");
Scanner scan=new Scanner(System.in);// 创建一个scanner
Shape rectangle=new Rectangle(scan.nextDouble(),scan.nextDouble());//新建一个长方形,并且输入他的长和宽
Shape circle=new Circle(scan.nextDouble());//新建一个圆,并且输入他的长和宽
System.out.println("长方形的信息:"+rectangle.toString());//输出详细信息
System.out.println("圆的信息:"+circle.toString());
System.out.println("输出长方形的宽"+rectangle.getWidth());
System.out.println("更改长方形的长");
rectangle.setLength(scan.nextDouble());
System.out.println("更改长方形的宽");
rectangle.setWidth(scan.nextDouble());
System.out.println("更改圆的半径");
circle.setRadius(scan.nextDouble());
System.out.println("输出长方形的长"+rectangle.getLength());
System.out.println("长方形的周长:"+rectangle.perimeter()+"长方形的面积:"+rectangle.area());
System.out.println("圆的周长:"+circle.perimeter()+"圆的面积:"+circle.area());
scan.close();
}
}
2.基于第1题定义测试类,利用多态来实现几何图形对象的赋值和引用。
- 首先定义一个Shape类的数组(含3个元素)s,其中s[0]为Shape类对象,s[1]为Circle类对象,s[2]为Rectangle类对象
- 利用for循环调用s[i].toString()打印输出每个类对象的信息。
package Work3;
public class ArrayShape {
public static void main(String[] args) {
Shape s[] = new Shape[3];
s[0] = new Shape();
s[1] = new Rectangle(2,3);
s[2] = new Circle(5);
//文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处
for (int i = 0; i < 3; i++){
System.out.println(s[i].toString());
}
}
}
3.定义复数类Plurality并设计加减法
- 该类包含表征复数的属性,属性的setter和getter方法,
- 创建和初始化对象的构造方法(体现重载),
- 实现复数加、乘运算方法(体现方法重载)
- 以及返回复数格式x+iy的toString()(重写Object类中toString())方法。
- 最后编写测试类TestPlurality去验证创建复数类的功能。
package Work3;
import java.util.Scanner;
public class TestPlurality {
Scanner scan = new Scanner(System.in);
private double real1,real2;//两个实部
private double image1,image2;//两个虚部
private double plusReal,plusImage, subReal, subImage;//实部相加,虚部相加,实部相减,虚部相减。
public double getImage1() {
return image1;
}//查询实数1的虚部
public double getImage2() {
return image2;
}//查询实数2的虚部
public double getReal1() {
return real1;
}//查询实数1的实部
public double getReal2() {
return real2;
}//查询实数2的实部
public double getPlusReal() {
return plusReal;
}//查询实部相加
public double getPlusImage() {
return plusImage;
}//查询虚部相加
public double getSubReal() {
return subReal;
}//查询实部相减
public double getSubImage() {
return subImage;
}//查询虚部相减
public void setPlusReal(double plusReal) {
this.plusReal = plusReal;
}
public void setPlusImage(double plusImage) {
this.plusImage = plusImage;
}
public void setSubImage(double subImage) {
this.subImage = subImage;
}
public void setSubReal(double subReal) {
this.subReal = subReal;
}
//文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处文档作者为晓梦,博客园地址https://www.cnblogs.com/nekodream/。转载请注明出处
public void setImage1(double image1) {
this.image1 = image1;
}
public void setImage2(double image2) {
this.image2 = image2;
}
public void setReal1(double real1) {
this.real1 = real1;
}
public void setReal2(double real2) {
this.real2 = real2;
}
@Override
public String toString() {
return "TestPlurality{" +
", real1=" + real1 +
", real2=" + real2 +
", image1=" + image1 +
", image2=" + image2 +
", plusReal=" + plusReal +
", plusImage=" + plusImage +
", subReal=" + subReal +
", subImage=" + subImage +
'}';
}
public String ToString(){
System.out.println("请依次输入第一个数的实部,虚部;第二个数的实部,虚部:");
//本文来自博客园,作者:晓梦ペ,转载请注明原文链接:https://www.cnblogs.com/nekodream/p/16837590.html
real1 = scan.nextDouble();
image1 = scan.nextDouble();
real2 = scan.nextDouble();
image2 = scan.nextDouble();
plusReal = real1+real2;
plusImage = image1+image2;
subReal = real1-real2;
subImage = image1-image2;
if (subImage <0){
return ("和为"+plusReal+"+"+plusImage+"i"+"差为"+(subReal)+(subImage)+"i");
}//负数自带负号,正数要额外加+。
return ("和为"+plusReal+"+"+plusImage+"i"+"差为"+(subReal)+"+"+(subImage)+"i");
}
public static void main(String[] args) {
TestPlurality ans = new TestPlurality();
System.out.println(ans.ToString());
System.out.println(ans.toString());
}
}
![5c8702262e8eaeded963b80c594761ee342039238]()