A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马张伟 黑马帝   /  2012-1-3 08:15  /  1983 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马张伟 于 2012-1-3 08:15 编辑

编写一个完整的Java 程序。包含接口ShapeArea,类Circle、Rectangle、Test,具体要求如下:
⑴接口ShapeArea:
①接口方法
double getArea():求一个形状的面积
double getPerimeter ():求一个形状的周长
⑵类Rectangle:
实现ShapeArea接口,并有以下属性和方法:
①属性
width: double型,表示长方形的宽度
height:double型,表示长方形的长度
②方法
Rectangle(double w, double h):构造函数
toString():输出矩形的描述信息,如“width=1.0,height=2.0,perimeter=6.0,area=2.0”
⑶Test类作为主类要完成测试功能
① 生成Rectangle对象
② 调用对象的toString方法,输出对象的描述信息

下面是我写的答案
interface ShapeArea //接口
{
double getArea();
double getPerimeter();
}

class Rectangle implements ShapeArea //类
{
double width,height;
Rectangle(double w,double h)
{ width=w;
height=h;
}
double getArea()
{ double area;
area=width*height;
return area;
}
double getPerimeter()
{ double perimeter;
perimeter=2*width*height;
return perimeter;
}
void toString()
{ System.out.println("width="+width+","+"height="+height+","+"/n"
+"perimeter="+getPerimeter()+","+"area="+getArea());
}
}

class Test
{
public static void main(String args[])
{
Rectangle test=new Rectangle(4,6);
test.toString();
}
}

错误提示
F:\>javac Test.java
Test.java:19: Rectangle 中的 getPerimeter() 无法实现 ShapeArea 中的 getPerimeter
();正在尝试指定更低的访问权限;为 public
double getPerimeter()
^
Test.java:14: Rectangle 中的 getArea() 无法实现 ShapeArea 中的 getArea();正在尝
试指定更低的访问权限;为 public
double getArea()
^
Test.java:24: Rectangle 中的 toString() 无法覆盖 java.lang.Object 中的 toString(
);正在尝试指定更低的访问权限;为 public
void toString()

3 个回复

倒序浏览
本帖最后由 李盈科 于 2012-1-3 09:11 编辑

你出的问题:1.子类要覆盖了父类中定义的方法,那么不能降低其可见性。在接口中的抽象方法只能是public的,默认也是public权限。ss2重写toString 写错了 代码如下
  1. interface ShapeArea // 接口
  2. {
  3.         public double getArea();

  4.         double getPerimeter();
  5. }

  6. class Rectangle implements ShapeArea // 类
  7. {
  8.         double width, height;

  9.         Rectangle(double w, double h)
  10.         {
  11.                 width = w;
  12.                 height = h;
  13.         }

  14.         public double getArea()
  15.         {
  16.                 double area;
  17.                 area = width * height;
  18.                 return area;
  19.         }

  20.         public double getPerimeter()
  21.         {
  22.                 double perimeter;
  23.                 perimeter = 2 * width * height;
  24.                 return perimeter;
  25.         }
  26.         @Override
  27.         public String toString()
  28.         {
  29.                 // TODO Auto-generated method stub
  30.                 return "width=" + width + "," + "height=" + height + ","
  31.                 + "/n" + "perimeter=" + getPerimeter() + "," + "area="
  32.                 + getArea();
  33.         }
  34. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
吴上储 + 2

查看全部评分

回复 使用道具 举报
你的小毛病太多,我就不细说了;下面是我的代码,你拿回去运行一下试试,希望对你有所帮助

/*
* ShapeArea接口
*
*/
public interface ShapeArea {
   
        public double getArea();
   
    public double getPerimeter();
       
}

/*
* Rectangle类
*
*/
public class Rectangle implements ShapeArea {

        private double width;
        private double height;

        public Rectangle( double height, double width) {
               
                this.height=height;
                this.width=width;
        }

        @Override
        public double getArea() {
               
                return width*height;
        }

        @Override
        public double getPerimeter() {
               
                return 2*(width+height);
        }
       
       
        public String toString(){
                return "width:"+width+"\t"+"heigh:t"+height+"\n"+"Area:"+getArea()+"\t"+"Perimeter:"+getPerimeter();
        }

}

/*
* Test测试类
*/
import java.util.Scanner;

public class Test {

        public static void main(String[] args) {

                Scanner input = new Scanner(System.in);

                System.out.print("请输入长:");
                double height = input.nextDouble();
                System.out.print("请输入宽:");

                double width = input.nextDouble();
                Rectangle re = new Rectangle(width, height);
                System.out.println(re.toString());

        }
}
回复 使用道具 举报
注意:接口中的成员变量和方法的访问权限默认是public的,
所以实现接口,重写的方法必须使用public修饰。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马