java 继承 多态 引用的问题 神人来啊

猫儿爷爷 2010-03-11 09:41:44
/**
*设计一个形状类,方法:求周长和求面积,
*形状类的子类:Rect(矩形),Circle(圆形)
*Rect类的子类:Square(正方形)
*不同的子类会有不同的计算周长和面积的方法创建三个不同的形状对象
*,放在Shape类型的数组里,分别打印出每个对象的周长和面积
*/

//设计一个形状类
class MyShape //父类
{
public double [] d = new double [5];
public MyShape ()
{

}
public static void main ( String [] args )
{
Rect re = new Rect ();
re.jmj(5.1,3.0);
re.jzc(6,3);
}
}
//形状类的子类Rect(矩形)
class Rect extends MyShape
{
public void jmj ( double a , double b )
{

System.out.println(Math.atan2(a,b) + d[0]); //求面积

}
public void jzc ()
{

System.out.println( (a + b) * 2 + d[1] ); //求周长
}

}
//形状类的子类Circle(圆形)
class Circle extends MyShape
{
public void ymj ()
{
//PI是圆周率
System.out.println( (Math.PI*r*r) + d[2] ); //求圆的面积
}
public void yzj ()
{

System.out.prinln( (Math.PI*2*r) + d[3]); // 求圆的周长
}
}
//Rect类的子类:Square(正方形)
class Square extends Rect
{
public void zmj ( )
{

System.out.println( Math.sqrt() + d[4]); //求面积
}
public void zzc (double a )
{

System.out.println( (a * 4) + d[5] );
}
}




怎么编译出错 各位神人帮我看下啊 本人 超级小白菜

给我指点下啊 我目前就是这个面向对象这里不是很理解 多态 重写 重载 不是很会应用 理论明白些 只是用到代码里就晕了 就不知道要怎么用了啊
还有我弱弱的问下 以后写这些代码 都要考虑什么呢 我写这些代码现在的思路不是很清楚 不知道都要用到JAVA里那些东西
...全文
222 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouyong80 2010-03-17
  • 打赏
  • 举报
回复
你加我QQ吧,一起学习!189402732
猫儿爷爷 2010-03-13
  • 打赏
  • 举报
回复
回三楼的
你的话:1.此类中的方法jzc()中用到的两个变量a和b没有定义。我想你的意思是沿用方法jmj中的a,b吧,但是这两个变量的只有在方法jmj中才可以使用
2.你的变量r是从什么地方冒出来的

我:1.大概是怎么个意思 本来是这样理解的 public void jzc (){
System.out.println( (a + b) * 2 + d[1] ); //求周长
}
是想直接输入 直接用到输出里 这样好像是无参的意思吧?? 然后调用的时候在他给赋值 原来是这样想的、

2. 在面向对象这一块 一敲代码就有点晕了 r的意思本来是这样的 也上面哪个意思差不多 调用的时候在给他赋值

3. 我对继承的理解就是小的继承大的 大的包括小的部分功能 比如电脑是个父类 那他的子类就是软件啊 硬件啊 网络啊 然后软件的子类有java啊 c vb vf c++ c# 语言啊 然后软件类可以继承父类电脑一些方法 比如电脑上可以装软件 应用软件 开发软件 啊 我这样理解的对嘛?? 只是我这个多态 重写 重载 构造方法 这些一用到一起就有点晕了 不知道哪个是哪个了

Dazzlingwinter 2010-03-12
  • 打赏
  • 举报
回复

public abstract class Shape {
private String name;
public Shape(String name) {
this.name = name;
}

public String getName() {
return name;
}
public abstract double calcGrith();
public abstract double calcAcreate();
}
public class Rect extends Shape{
private double width;
private double height;
public Rect(String name, double width, double height) {
super(name);
this.width = width;
this.height = height;
}
@Override
public double calcAcreate() {
return width * height;
}

@Override
public double calcGrith() {
return 2 * (width + height);
}

@Override
public String getName() {
return super.getName();
}

}
public class Circle extends Shape{
private double radius;
public Circle(String name, double radius) {
super(name);
this.radius = radius;
}
@Override
public double calcAcreate() {
return Math.PI * radius * radius;
}

@Override
public double calcGrith() {
return Math.PI * 2 * radius;
}

@Override
public String getName() {
return super.getName();
}
}
public class Square extends Rect{
private double edge;
public Square(String name, double edge) {
super(name, edge, edge);
this.edge = edge;
}

@Override
public double calcAcreate() {
return edge * edge;
}

@Override
public double calcGrith() {
return 4 * edge;
}

@Override
public String getName() {
return super.getName();
}
}

import java.util.ArrayList;
import java.util.List;

public class Main {
public static void main(String[] args) {
List<Shape> shapeList = new ArrayList<Shape>();
Shape s1 = new Rect("矩形", 20, 10);
Shape s2 = new Circle("圆形", 10);
Shape s3 = new Square("方形", 10);
shapeList.add(s1);
shapeList.add(s2);
shapeList.add(s3);
Shape s = null;
for(int i=0; i<shapeList.size(); i++) {
s = shapeList.get(i);
System.out.println(s.getName() + "\t周长:" + s.calcGrith() + "\t面积:" + s.calcAcreate());
}
}
}
/*
矩形 周长:60.0 面积:200.0
圆形 周长:62.83185307179586 面积:314.1592653589793
方形 周长:40.0 面积:100.0*/
SambaGao 2010-03-12
  • 打赏
  • 举报
回复
public static void main ( String [] args )
{
Rect re = new Rect ();
re.jmj(5.1,3.0);
re.jzc(6,3);
}

怎么放到父类里了。。。
zhouyong80 2010-03-12
  • 打赏
  • 举报
回复
问题太多了。
1、作用域问题
class Rect extends MyShape
{
public void jmj ( double a , double b ){
System.out.println(Math.atan2(a,b) + d[0]); //求面积
}
public void jzc (){
System.out.println( (a + b) * 2 + d[1] ); //求周长
}
}
此类中的方法jzc()中用到的两个变量a和b没有定义。我想你的意思是沿用方法jmj中的a,b吧,但是这两个变量的只有在方法jmj中才可以使用。所以jzc方法应该修改为:
public void jzc(double a, double b) {
System.out.println( (a + b) * 2 + d[1] ); //求周长
}
然后再来看你的Circle类,更是错得离谱
class Circle extends MyShape
{
public void ymj ()
{
//PI是圆周率
System.out.println( (Math.PI*r*r) + d[2] ); //求圆的面积
}
public void yzj ()
{

System.out.prinln( (Math.PI*2*r) + d[3]); // 求圆的周长
}
}
你的变量r是从什么地方冒出来的?根本就没有定义。
另外,你所有的类中都没有对数组d进行初始化,也就是说,无论你d[0],d[1]还是d[n]值都是0,完全没有意义。
2、你并没有理解什么是继承,为什么要继承。建议你好好的看看书,不过我觉得你应该从头开始,从最基本开始学。从你的代码可以看出,你对程序设计完全没有概念。还是先补一下对象的知识吧!还是给你给出一个完整的代码,虽然不一定是最好的实现,不过,我想应该符合题意吧!献丑了!

/**
*设计一个形状类,方法:求周长和求面积,
*形状类的子类:Rect(矩形),Circle(圆形)
*Rect类的子类:Square(正方形)
*不同的子类会有不同的计算周长和面积的方法创建三个不同的形状对象
*,放在Shape类型的数组里,分别打印出每个对象的周长和面积
*/


public class Test {
public static void main(String[] args) {
MyShape rect = new Rect(3.0, 4.0);
MyShape square = new Square(3.0);
MyShape circle = new Circle(3.0);
MyShape[] shapes = new MyShape[] {rect, square, circle};

System.out.println("长方形的周长是:"+shapes[0].zc());
System.out.println("长方形的面积是:"+shapes[0].mj());
System.out.println("正方形的周长是:"+shapes[1].zc());
System.out.println("正方形的面积是:"+shapes[1].mj());
System.out.println("圆形的周长是:"+shapes[2].zc());
System.out.println("圆形的面积是:"+shapes[2].mj());
}
}


/**
* 形状类,父类.设计为一个抽象类,或者接口。
*/
abstract class MyShape {
/**
* 抽象方法,计算某个形状的面积,在不同子类中有不同的实现
* @return 形状的面积
*/
abstract double mj();
/**
* 抽象方法,计算某个形状的州长,在不同的子类中有不同的实现
* @return 形状的周长
*/
abstract double zc();
}

/**
* 形状类的子类rect(矩形)
*
*/
class Rect extends MyShape {

/*
* 一下两个私有变量属于矩形特有的属性
*/
private double length; //矩形的长
private double width; //矩形的宽

/*
* 默认构造函数,初始化矩形的长和宽为0
*/
public Rect() {
super();
this.length = 0;
this.width = 0;
}

/**
* 带参数构造方法,接受两个参数作为矩形的长和宽
*/
public Rect(double length, double width) {
super();
this.length = length;
this.width = width;
}

/**
* 重载的方法,求矩形的面积
*/
@Override
double mj() {
return this.length * this.width;
}

/**
* 重载的方法,求矩形的周长
*/
@Override
double zc() {
return (this.length + this.width) * 2;
}

}

/**
* Rect类的子类:Square(正方形)
*
*/
class Square extends Rect {

private double side; //正方形的边长

public Square() {
super();
this.side = 0;
}

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

/**
* 重载的方法,求正方形的周长
*/
@Override
double zc() {
return this.side * 4;
}

/**
* 重载的方法,求正方形的面积
*/
@Override
double mj() {
return this.side * this.side;
}
}

/*
* 形状类的子类Circle(圆形)
*/
class Circle extends MyShape {

final double PI = 3.14; //常量PI
double r; //圆形半径

/*
* 构造函数,指定圆形的半径构造一个圆形
*/
public Circle(double r) {
super();
this.r = r;
}

/*
* 默认构造函数,默认圆形半径为0
*/
public Circle() {
super();
this.r= 0;
}

/**
* 重载的方法,求圆形的周长
*/
@Override
double zc() {
return 2 * PI * r;
}

/**
* 重载的方法,求圆形的面积
*/
@Override
double mj() {
return PI * r * r;
}
}

一头头 2010-03-12
  • 打赏
  • 举报
回复
恩 加油!
liuzch 2010-03-11
  • 打赏
  • 举报
回复
没有public类,并且你貌似审题都没审清楚,要求“创建三个不同的形状对象
放在Shape类型的数组里”
建议先把Java基础打好,你对语法的掌握还很不过关,好好加油吧!

62,620

社区成员

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

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