JAVA实验4 类与对象(封装继承多态等机制的使用)

实验四 类与对象(封装、继承、多态等机制的使用)

实验内容:

1、 编写一个名为TwoDimensionalShape的抽象类,拥有属性area和circumference表示面积和周长,以及抽象方法getArea()和getCircumference(),用于获取面积和周长。

2、 编写Printable接口,包括一个抽象方法printShapeInfo,用于输出图形信息。

3、 分别编写Rectangle、Triangle、Circular三个类,用于描述矩形、三角形和圆形,要求继承于TwoDimensionalShap类,并实现Printable接口,每个图形有各自的构造方法,矩形有length和width字段表示长和宽,三角形有base、hypotenus1和hypotenus2字段表示底和两条斜边,圆形有radius字段表示半径,按几何常识实现父类中所定义的抽象方法,printShapeInfo方法要求能够输出:

(1) 图形的类型(使用getClass方法)

(2) 图形的基本数据(使用自定义toString方法,输出图形的字段,输出示例:宽3.0, 长4.0)

4、 编写一个名为ShapeDetector的类,拥有三个重载的detectShape方法,分别为detectShape(Rectangle r)、detectShape(Triangle t)、detectShape(Circular c),分别输出所接收到的图形的类型。

5、 编写Test类,创建一个名为Shapes的TwoDimensionalShape型数组,并创建Rectangle、Triangle、Circular的对象存储在该数组中,用foreach循环遍历该数组,使用detectShape方法输出该对象的图形类型,用printShapeInfo方法输出该对象的图形信息,然后分别用getArea和getCircumference方法输出面积及周长。

6、(可选)给三个图形的构造方法加上验证功能,保证所输入三角形三边能够组成三角形,圆形半径、矩形的长和宽为正实数。

要求:程序文件放置在合适的包中,保证程序有良好的组织性,在编写过程中尽量保证程序的良好封装性。

附:三角形面积公式 p=(a+b+c)/2 s=√p(p-a)(p-b)(p-c)

public class test {
public static void main(String[] args) {
Rectangle r1 = new Rectangle(10.0, 20.0);
Triangle t1 = new Triangle(3, 4, 5);
Circular c1 = new Circular(10);
ShapeDetector sd = new ShapeDetector();
TwoDimensionalShape[] Shape = { r1, t1, c1 };
for (TwoDimensionalShape tds : Shape) {
if (tds instanceof Rectangle) {
sd.detectShape((Rectangle) tds);
((Rectangle) tds).printShapeInfo();
;
}
if (tds instanceof Circular) {
sd.detectShape((Circular) tds);
((Circular) tds).printShapeInfo();
}
if (tds instanceof Triangle) {
sd.detectShape((Triangle) tds);
((Triangle) tds).printShapeInfo();
}
System.out.println("Area=" + tds.getArea());
System.out.println("Circumference=" + tds.getCircumference()+"\n");
}
}

}

abstract class TwoDimensionalShape {

double area, circumference;

public abstract double getArea();

public abstract double getCircumference();

}

interface Printable {
void printShapeInfo();
}

class Rectangle extends TwoDimensionalShape implements Printable {

double length, width;

Rectangle(double l, double w) {
this.length = l;
this.width = w;
}

public double getLength() {
return length;
}

public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getArea() {
return length * width;
}
public double getCircumference() {
return 2 * (length + width);
}
public String toString() {
return "length:" + length + " width:" + width;
}
public void printShapeInfo() {
System.out.println("this is a " + getClass());
System.out.println(toString());
}
}

class Triangle extends TwoDimensionalShape implements Printable {

double base, hypotenus1, hypotenus2;

Triangle(double b, double h1, double h2) {
this.base = b;
this.hypotenus1 = h1;
this.hypotenus2 = h2;
}
public double getBase() {
return base;
}
public void setBase(double base) {
this.base = base;
}
public double getHypotenus1() {
return hypotenus1;
}
public void setHypotenus1(double hypotenus1) {
this.hypotenus1 = hypotenus1;
}
public double getHypotenus2() {
return hypotenus2;
}
public void setHypotenus2(double hypotenus2) {
this.hypotenus2 = hypotenus2;
}
public double getArea() {
double p = (base + hypotenus1 + hypotenus2) / 2;
double s = Math.sqrt(p * (p - base) * (p - hypotenus1) * (p - hypotenus2));
return s;
}
public double getCircumference() {
return base + hypotenus1 + hypotenus2;
}
public String toString() {
return "base:" + base + " hypotenus1:" + hypotenus1 + " hypotenus2:" + hypotenus2;
}
public void printShapeInfo() {
System.out.println("this is a " + getClass());
System.out.println(toString());
}
}

class Circular extends TwoDimensionalShape implements Printable {

double radius;

Circular(double r) {
this.radius = r;
}

public double getRadius() {
return radius;
}

public void setRadius(double radius) {
this.radius = radius;
}

public double getArea() {
return Math.PI * radius * radius;
}

public double getCircumference() {
return 2 * Math.PI * radius;
}

public String toString() {
return "radius:" + radius;
}

public void printShapeInfo() {
System.out.println("this is a " + getClass());
System.out.println(toString());
}
}

class ShapeDetector {
public void detectShape(Rectangle r) {
System.out.println(r.getClass());
}

public void detectShape(Triangle t) {
System.out.println(t.getClass());
}

public void detectShape(Circular c) {
System.out.println(c.getClass());
}
}

此代码中把所有的主类和接口均写在了一个文件中,方便贴出来,如有需要请在eclipse中分别创建文件分别写这些类

原文地址:https://www.cnblogs.com/Numblzw/p/10817417.html

时间: 2024-10-24 20:53:21

JAVA实验4 类与对象(封装继承多态等机制的使用)的相关文章

JAVA实验3 类与对象

实验要求: 掌握类与对象的基本思想 能够熟练地使用Java设计并编写类 能够灵活运用各种对象 实验内容: 希腊神话中,宙斯战胜了泰坦之后成为众神之王,以此为背景,通过构造相应对象.属性和方法,并用随机的方式,模拟宙斯与泰坦的战斗过程. 构建类Titan,要求如下: 整形字段HP,以及相应的getter和setter 空参数列表构造方法Titan(),创造出的HP默认为700 带参数构造方法Titan(int HP),创造出指定HP的对象 方法attack(Zues z),参数为宙斯对象,每次调用

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态

 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门 面向对象:大象, 你进冰箱. 此时主语是大象. 我操纵的是大象. 此时的大象就是对象 1. 面向过程: 一切以事物的流程为核心. 核心是"过程"二字, 过程是指解决问题的步骤, 即, 先?干什么, 后干什么. 基于该思想编写程序就好比在编写一套流水线. 是一种机械 式的编程

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

Java自学-面向对象 类和对象

Java中的类和对象 引入面向对象的基本概念 假设,我们要设计一个LOL这样的游戏,使用面向对象的思想来设计,应该怎么做? 步骤 1 : 设计英雄这个类 LOL有很多英雄,比如盲僧,团战可以输,提莫必须死,盖伦,琴女 所有这些英雄,都有一些共同的状态 比如,他们都有名字,hp,护甲,移动速度等等 这样我们就可以设计一种东西,叫做类,代表英雄这样一种事物 类: 英雄(Hero) 状态: 名字, 血量,护甲,移动速度 注: 本例用到了3种数据类型 分别是 String(字符串),float(浮点数)

封装继承多态到底讲的是什么

封装继承多态到底讲的是什么 封装.继承.多态并不是针对C#语言提出来的,他是一个在面向对象思想下产生的一个概念.所以想要弄明白封装.继承.多态,首先就要先了解面向对象概念. 封装:当我们提及面向对象的时候,这个对象怎么来?就是通过我们人为的封装得来.封装就是把一些特征或功能组合到一个抽象的对象上.就比如说电脑:它的特征是有一个显示屏,有一个主机,有鼠标和键盘等等.功能有计算等.那我们把这些特征和功能组合到“电脑”这个抽象的名词上时,“电脑”于是就有了这些特征和功能.但这个“电脑”不是实物,它代表

三大特性:封装,继承,多态

透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础. 三大特性是:封装,继承,多态 所谓封装: 也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性. 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体.在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问.通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对

面向对象的三大特性---封装继承多态

面向对象的三大特性---封装继承多态 首先我们来创建一个控制台程序 新建一个父类Person 创建一个子类继承父类Person 子类: main函数: 输出结果: 根据结果显示创建子对象,首先调用父类的构造函数在调用子类的构造函数. 继承的传递性 例如: A:B,B:C,则A:C ⅰ.继承过来之后被隐藏,有意隐藏加一个关键字"new",如果加了关键字"new",就告诉子类,父类里面的sayHi只能被隐藏,不能被覆写  ⅱ.继承过来之后被覆写/重写,覆写需要在父类里面