求java大一的一道抽象类编程的代码。

zxh524457 2012-04-14 11:20:09
抽象类编程:设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。继承该抽象类定义三个类:三角型、矩形、圆。 再定义一个以你的名字全拼为名的测试类,分别创建一个三角形、矩形、圆存入一个数组中,将数组中各类图形的面积输出。
注:三角形面积s=sqrt(p*(p-a)*(p-b)*(p-c)) 其中,a,b,c为三条边,p=(a+b+c)/2
...全文
758 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sffx123 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
我来接分。

Java code


/*Shape抽象类*/
public abstract class Shape {
/*唯一的方法,抽象方法getArea(Shage)
* 参数为一个形状*/
public abstract double getArea(Shape sh);

}




/*圆类*/
public class ……
[/Quote]建议抽象类的getArea()方法不用传参,子类继承之后会重写该方法,调用的时候也是调用自己的,
子类.getArea() or 子类.getArea(子类)后面不符合面向对象的思想。
  • 打赏
  • 举报
回复
这是大学里java书上的习题。来这里求答案了。
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
抽象类编程:设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。继承该抽象类定义三个类:三角型、矩形、圆。 再定义一个以你的名字全拼为名的测试类,分别创建一个三角形、矩形、圆存入一个数组中,将数组中各类图形的面积输出。
注:三角形面积s=sqrt(p*(p-a)*(p-b)*(p-c)) 其中,a,b,c为三条边,p=(a+b+c)/2
[/Quote]


//形状类定义为抽象类---不能被实例化
public abstract class Shape {

//计算面积的抽象方法
public abstract double getArea();

}



//圆形类继承父类---形状类
public class Circle extends Shape{

private double radius = 0; //圆的半径

private final static double PI = 3.14; //圆周率---常量

//圆类的带参构造函数
public Circle(double radius)
{
this.radius = radius;
}

//重写父类---形状类计算面积的抽象方法
public double getArea()
{
return (PI * radius * radius);
}

}



//矩形类继承父类---形状类
public class Rectangle extends Shape{

private double width = 0; //定义矩形的宽

private double height = 0; //定义矩形的高

//矩形类的带参构造函数
public Rectangle(double width, double height)
{
this.width = width;
this.height = height;
}

//重写父类---形状类计算面积的抽象方法
public double getArea()
{
return (width * height);
}
}



//三角形类继承父类---形状类
public class Triangle extends Shape{

private double bottom = 0; //三角形的底

private double height = 0; //三角形的高

//三角形类的带参构造函数
public Triangle(double bottom, double height)
{
this.bottom = bottom;
this.height = height;
}

//重写父类---形状类计算面积的抽象方法
public double getArea()
{
return (this.bottom * this.height / 2);
}

}


import java.util.Arrays;

public class Test {

public static void main(String[] args) {

//创建一个数组存储多个形状对象
double[] d = new double[] {new Triangle(3, 4).getArea(),new Circle(1).getArea(),new Rectangle(2, 2).getArea()};

//打印输出图形的面积
System.out.println("三角形的面积是:"+d[0]);
System.out.println("圆形的面积是:" + d[1]);
System.out.println("矩形的面积是:" + d[2]);

//对图形的面积进行从小到大排序
Arrays.sort(d);

//循环遍历输出图形的面积
System.out.print("排序后的面积:");
for (int i = 0; i < d.length; i++) {
System.out.print(d[i]+"\t");
}
}
}

LZ,功能已经实现,看看。
xttxqjfg 2012-05-10
  • 打赏
  • 举报
回复
像这种基础性的测试楼主还是自己尝试着去写为好,对自己的基础有好处的……
传说中的大神 2012-04-15
  • 打赏
  • 举报
回复
代码 简单如下:没有实现.
/**
* 形状
*/
abstract class Shape {
public abstract double getArea(Shape shape);

public static void main(String[] args) {
Trigon trigon = new Trigon();
Rectangle rectangle = new Rectangle();
Circularity circularity = new Circularity();
Shape[] shapeArr = new Shape[3];
shapeArr[0] = trigon;
shapeArr[1] = rectangle;
shapeArr[2] = circularity;

for (Shape s : shapeArr) {
System.out.println(s.getArea(s));
}
}
}

/**
* 三角形
*/
class Trigon extends Shape {

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

}

/**
* 矩形
*/
class Rectangle extends Shape {

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

}

/**
* 圆
*/
class Circularity extends Shape {

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

}
「已注销」 2012-04-15
  • 打赏
  • 举报
回复
我来接分。

/*Shape抽象类*/
public abstract class Shape {
/*唯一的方法,抽象方法getArea(Shage)
* 参数为一个形状*/
public abstract double getArea(Shape sh);

}




/*圆类*/
public class Circle extends Shape{
/*成员变量
* 半径*/
private double r = 0;

/*构造函数*/
public Circle(double r)
{
this.r = r;
}

/*求面积函数*/
public double getArea(Shape sh) {
// TODO Auto-generated method stub
double s = 0;//面积
s = this.r * this.r * Math.PI;
return s;
}

}




/*矩形类*/
public class Rectangle extends Shape{
/*成员变量,长、宽*/
private double a = 0;
private double b = 0;

/*构造函数*/
public Rectangle(double a, double b)
{
this.a = a;
this.b = b;
}


/*继承、实现求面积函数*/
public double getArea(Shape sh) {
// TODO Auto-generated method stub
double s = 0;//面积
s = this.a * this.b;//求面积
return s;
}

}






/*三角形类*/
public class Triangle extends Shape{
/*成员变量
* 三条边的长度*/
private double a = 0;
private double b = 0;
private double c = 0;

/*构造函数*/
public Triangle(double a, double b, double c)
{
this.a = a;
this.b = b;
this.c = c;
}

/*继承、实现求面积函数*/
public double getArea(Shape sh) {
// TODO Auto-generated method stub
double s = 0;//面积
double p = (a + b + c)/2;
s = Math.sqrt(p*(p-a)*(p-b)*(p-c));//求面积
return s;
}

}



/*测试类*/
public class Test {
/*主函数*/
public static void main(String agrs[])
{
/*数组*/
Shape sh[] = new Shape[3];
/*创建三个类*/
sh[0] = new Circle(2);
sh[1] = new Rectangle(2, 3);
sh[2] = new Triangle(2, 2, 3);
/*输出面积*/
for (int i = 0; i < 3; ++i) {
System.out.println(sh[i].getArea(sh[i]));
}
}
}


悠悠-我心 2012-04-15
  • 打赏
  • 举报
回复
看上去行 试试
Java面向对象 1 1 学习方法与要 1 2 面向对象语言与面向过程语言的区别 7 3 面向对象?什么对象? 8 4 什么是类? 9 5 如何创建一个类Class? 10 6 如何使用类创建对象 10 7 引用与实例 11 8 实例属性与实例方法 11 9 实例属性与实例方法的使用 12 10 实例属性属于实例本身,与其他实例没有关系 13 11 javaBean编码规范 14 12 练习: 15 13 什么构造方法 16 14 构造方法的作用? 17 15 this关键字 17 16 方法调用时的引用传递还是值传递 19 17 面向对象语言的三大特性:封装,继承,多态 20 18 什么是封装?封装在哪? 20 18.1 封装的好处? 20 19 访问修饰符 20 20 面向对象的特性-继承 21 20.1 继承的关键字:extends 21 20.2 继承的语法格式: 21 20.3 继承的好处 21 20.4 Object类 21 20.5 继承是以什么方法实现的? 22 20.6 两个子类的实例,super会指向同一个父类实例吗? 23 20.7 在创建子类实例时,会创建父类实例,先创建哪个? 23 20.8 在子类构造方法中如何调用父类构造方法? 23 20.9 super关键字 24 20.10 父类中私有属性和私有方法可以继承吗? 24 20.11 在代码开发时先开发父类还是先开发子类? 24 20.12 父类是怎么来的? 25 20.13 父类中放的所有子类的共性。子类可以有自己的特性。 26 20.14 方法重写(核心@Override) 28 20.15 练习: 29 20.16 作业题: 31 21 类与类之间的关系 32 22 GC:垃圾回收机制 33 23 Object类 33 23.1 常用方法:boolean equals(Object) 33 23.2 常用方法:String toString() 34 24 继承整理 34 25 面向对象三大特性:多态(核心) 34 25.1 多态的前提? 35 25.2 什么是多态? 35 25.3 父类的引用指向子类实例时,父类引用可以调用哪些方法? 35 26 引用类型的自动类型与强制类型转换 36 27 多态的应用 37 27.1 在使用多态时的一般格式: 37 27.2 练习:创建一个薪资专员(Persionnel),能计算员工工资,负责汇总当月所有员工的总工资数 38 27.3 练习:NewBasePlusSalesEmployee:针对BasePlusSalesEmployee有固定底薪的销售人员,有任务额度10K,满足任务额度正常发放,不满足任务额度发放底薪的80%,提成正常发放。 38 27.4 练习:设计一个形状类Shape 39 28 abstract关键字 41 28.1 abstract可以修饰的对象 41 28.2 抽象方法 41 28.3 抽象类 41 28.4 抽象方法与抽象类的关系 42 28.5 抽象方法与抽象类的使用 42 28.6 abstract的使用场合 42 29 练习:写一个“愤怒的小鸟”: 43 30 final关键字 43 30.1 final可以修饰到3个地方 43 30.2 引用类型加final修饰表示引用不可变 44 31 static关键字 44 31.1 static关键字可以修饰4个地方 44 31.2 静态属性 44 31.3 静态的与实例的 45 31.4 静态代码块 45 31.5 静态方法 45 31.6 静态方法是不能被继承 46 31.7 如何区分静态方法和实例方法的应用 46 31.8 静态导入(1.5新特性) 46 32 单例模式 47 32.1 饿汉模式 47 32.2 懒汉模式 47 33 接口(interface) 48 33.1 如何创建一个接口。 48 33.2 如何使用接口 48 33.3 如何使用类实现一个接口 49 33.4 接口的细节 49 34 接口的应用(面向对象分析) 49 34.1 案例(第一版,使用接口) 50 34.2 案例(第二版) 52 35面向对象设计原则 54 1、找出应用中可能需变化的代码,把它们独立出来,不要和那些需不变化的的代码混在一起 54 2、针对接口编程,而不要针对实现类编程 54 3、多用组合,少用继承(包含实现) 54 4、为了交互对象之间的松耦合设计而努力 54 5、类应该对扩展开放,对修改关闭 54 6、依赖倒置,要依赖抽象,不要依赖具体类 54 36 练习:超市收银 54 37 练习:接口表示一种能力,也可以是一种规范 56 38 策略模式 57 38.1 动作冒险游戏 57 38.2 类图 57 38.3 编写使用武器行为接口和实现类 58 38.4 编写角色类和子类 58 38.5 测试类 58 38.6 动作冒险游戏补丁:增加新的角色和新的技能 59 38.7 编写新的打斗行为 59 38.8 编写新的治疗行为和实现类 59 38.9 修改角色父类 60 38.10 修改King类 60 39 披萨工厂 61 39.1 编写披萨父类 61 39.2 编写各种披萨 61 39.3 编写披萨商品类 62 39.4 简单工厂 63 39.5 使用简单工厂修改商店类 63 39.6 使用简单工厂将创建对象代码单独的封装的好处? 64 39.7 使用常量优化工厂类 64 39.8 测试类 65 40 枚举(enum) 65 40.1 创建一个枚举 66 40.2 为枚举创建实例 66 40.3 如何使用枚举的实例 66 40.4 使用枚举优化披萨工厂 67 40.5 枚举类型也可以有构造方法 68 40.6 枚举类型也可以有属性 68 40.7 枚举类型也支持带参数的构造方法。 68 40.8 枚举类型也可以有实例方法 68 40.9 枚举类型也可以支持抽象方法 69 41 内部类 70 41.1 内部类的分类 70 41.2 匿名内部类 70 41.3 成员内部类 71 41.4 静态内部类 72 41.5 局部内部类 73 42 作业 :商超案例,以OOP重构 73
大家都是抱着对算法与数据结构极大的兴趣才参加集训的,我们也希望大家学有所成,但是刚刚接触信息学领域的同学往往存在很多困惑,不知道从何入手学习,在这篇向导里,我希望能将自己不多的经验与大家分享,希望对各位有所帮助. 一、语言是最重要的基本功 无论侧重于什么方面,只要是通过计算机程序去最终实现的竞赛,语言都是大家要过的第一道关.亚洲赛区的比赛支持的语言包括C/C++与JAVA.虽然JAVA在应用极为广泛,但是其运行速度不可恭维.而且在以往的比赛中来看,大多数队伍还是采用了C或者C++.而且C语言是大家接触的第一门编程语言,所以我们集训队都采用C和C++混编的方式写代码. 新来的同学可能C的基础知识刚刚学完,还没有接触过C++,其实在赛场上使用纯C的选手还是大有人在的,它们主要是看重了纯C在效率上的优势,所以这部分同学如果时间有限,并不需要急着去学习新的语言,只要提高了自己在算法设计上的造诣,纯C一样能发挥巨大的威力.但是我还是希望大家都能够学点C++. C++相对于C,在输入输出流上的封装大大方便了我们的操作,同时降低了出错的可能性,并且能够很好地实现标准流与文件流的切换,方便了调试的工作。如果有些同学比较在意这点,可以尝试C和C++的混编,毕竟仅仅学习C++的流操作还是不花什么时间的。 C++的另一个支持来源于标准模版库(STL),库中提供的对于基本数据结构的统一接口操作和基本算法的实现可以缩减我们编写代码的长度,这可以节省一些时间。但是,与此相对的,使用STL要在效率上做出一些牺牲,对于输入规模很大的题目,有时候必须放弃STL,这意味着我们不能存在“有了STL就可以不去管基本算法的实现”的想法;另外,熟练和恰当地使用STL必须经过一定时间的积累,准确地了解各种操作的时间复杂度,切忌对STL中不熟悉的部分滥用,因为这其中蕴涵着许多初学者不易发现的陷阱。像STL中的很多容器, vector,queue,stack,map,set等一定要比较熟悉,STL中的sort是必需要掌握的.掌握这些STL知识后写代码的时候相对于纯C会节省不少时间. C语言学习推荐:C程序设计(谭浩强编著) C++学习推荐: C++Prime, C++大学教程.(其实基本上的C++教程都行的…) STL学习推荐: C++Prime,STL标准库.(理论联系实际,边学就用学的最快) 二、以数学为主的基础知识十分重要 虽然被定性为程序设计竞赛,但是参赛选手所遇到的问题更多的是没有解决问题的思路,而不是有了思路却死活不能实现,这就是平时积累的基础知识不够。竞赛中对于基础学科的涉及主要集中于数学,此外对于物理、电路等等也可能有一定应用,但是不多。因此,大一的同学也不必为自己还没学数据结构而感到不知从何入手提高,把数学捡起来吧!下面来谈谈在竞赛中应用的数学的主要分支。 1、离散数学——作为计算机学科的基础,离散数学是竞赛中涉及最多的数学分支,其重中之重又在于图论和组合数学,尤其是图论。 图论之所以运用最多是因为它的变化最多,而且可以轻易地结合基本数据结构和许多算法的基本思想,较多用到的知识包括连通性判断、DFS和BFS,关节点和关键路径、欧拉回路、最小生成树、最短路径、二部图匹配和网络流等等。虽然这部分的比重很大,但是往往也是竞赛中的难题所在,如果有初学者对于这部分的某些具体内容暂时感到力不从心,也不必着急,可以慢慢积累。 竞赛中设计的组合计数问题大都需要用组合数学来解决,组合数学中的知识相比于图论要简单一些,很多知识对于小学上过奥校的同学来说已经十分熟悉,但是也有一些部分需要先对代数结构中的群论有初步了解才能进行学习。组合数学在竞赛中很少以难题的形式出现,但是如果积累不够,任何一道这方面的题目却都有可能成为难题。 2、数论——以素数判断和同余为模型构造出来的题目往往需要较多的数论知识来解决,这部分在竞赛中的比重并不大,但只要来上一道,也足以使知识不足的人冥思苦想上一阵时间。素数判断和同余最常见的是在以密码学为背景的题目中出现,在运用密码学常识确定大概的过程之后,核心算法往往要涉及数论的内容。 3、计算几何——计算几何相比于其它部分来说是比较独立的,就是说它和其它的知识点很少有过多的结合,较常用到的部分包括——线段相交的判断、多边形面积的计算、内点外点的判断、凸包等等。计算几何的题目难度不会很大,但也永远不会成为最弱的题。 4、线性代数——对线性代数的应用都是围绕矩阵展开的,一些表面上是模拟的题目往往可以借助于矩阵来找到更好的算法。 5、概率论——竞赛是以黑箱来判卷的,这就是说你几乎不能动使用概率算法的念头,但这也并不是说概率就没有用。关于这一点,只有通过一定的练习才能体会。而且近年来概率题出现的次数越来越多了.

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧