```interface Shape{
public abstract double getArea();
public abstract double getCircumference();
}```

```package javaapplication3;
import java.util.Scanner;
interface Shape{
public abstract double getArea();
public abstract double getCircumference();
}

class Circle implements Shape {
private double r=0;
public Circle(double r) {
this.r=r;}
public double getR(){
return this.r; }
public double getArea() {
return (3.14*this.r*this.r);}
public double getCircumference(){
return 2*3.14*this.r;
}
}

class Triangle implements 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 getA() {
return this.a;}
public double getB() {
return this.b;}
public double getC() {
return this.c;}
public double getArea() {
// 根据海伦公式求三角形的面积
double p=(a+b+c)/2;
return Math.pow(p*(p-a)*(p-b)*(p-c),0.5);}
public double getCircumference(){
return this.a+this.b+this.c;
}
}

class Rentangle implements Shape{
public double height=0;
public double width=0;
public Rentangle(double height, double width){
this.height = height;
this.width = width;}
public double getHeight(){
return this.height; }
public double getWidth(){
return this.width;}
public double getArea(){
return this.height*this.width;
}
public double getCircumference(){
return 2*(this.height+this.width);
}
}

public class testshape {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
double r=0;
double a=0;
double b=0;
double c=0;
double height=0;
double width=0;
do{
System.out.println("请输入圆的半径r：");
r= input.nextDouble();
if (r<=0) {
System.out.print("输入错误!!!");
}
}while (r<=0);

do {
System.out.println("请输入三角形的三条边a、b、c：");
a= input.nextDouble();
b= input.nextDouble();
c= input.nextDouble();
if (a<0||b<0||c<0||a+b<=c||a-b>=c) {
System.out.print("输入错误!!!");
}
} while ((a<0||b<0||c<0||a+b<=c||a-b>=c));

do {
System.out.println("请输入矩形的长和宽height、width：");
height= input.nextDouble();
width= input.nextDouble();
if (height<=0||width<=0) {
System.out.print("输入错误!!!");
}
} while (height<=0||width<=0);

Circle C=new Circle(r);
Triangle T=new Triangle(a,b,c);
Rentangle R=new Rentangle(height,width);

System.out.println("******圆*******");
System.out.println("半径: " + C.getR());
System.out.println("面积 : " + C.getArea());
System.out.println("周长 : " + C.getCircumference());

System.out.println("*******三角形*******");
System.out.println("三边为: " + T.getA()+","+T.getB()+","+T.getC());
System.out.println("面积 : " + T.getArea());
System.out.println("周长 : " + T.getCircumference());

System.out.println("*******矩形*******");
System.out.println("长: " + R.getHeight());
System.out.println("宽: " + R.getWidth());
System.out.println("面积 : " + R.getArea());
System.out.println("周长 : " + R.getCircumference());
}
} ```

java的接口的用处主要体现在下面几个方面：
（1）通过接口可以实现不相关类的相同行为，而不需要了解对象所对应的类。
（2）通过接口可以指明多个类需要实现的方法。
（3）通过接口可以了解对象的交互界面，而不需了解对象所对应的类。

接口定义了一个实体可能发出的动作。但是只是定义了这些动作的原型，没有实现，也没有任何状态信息。
所以接口有点象一个规范、一个协议，是一个抽象的概念；而类则是实现了这个协议，满足了这个规范的具体实体，是一个具体的概念。
从程序角度，简单理解，接口就是函数更新，类就是函数实现。需要注意的是同一个声明可能有很多种实现。

1、接口中定义类方法的原型，但是不能说是空方法，因为空方法的意思是有实现体，只不过实现体是空操作。实际上接口没有定义任何实现体。具体的实现体都是在实现接口的类中，接口只是定义了这些方法的调用方式。
你当然也可以不用接口，直接在类里面写方法，但是如果你的一组方法需要在很多类里实现，那么把它们抽象出来，做成一个接口规范，不是更好么？
2、一个类描述了一个实体，这个实体可能是一个复杂的对象，它的动作很多，如果把这些动作分类，用接口a定义其中的某一组动作，接口b定义其中的另外一组动作，这样的结构，比较清楚。
这种方式具备了多继承的优点，避免了多继承的缺陷。实际上在历史上，接口在很大程度上，是为了解决多继承带来的种种问题而设计出来的。
3、包中那些已定义的接口，怎么知道那里面定义了什么方法。
接口里定义了方法的输入输出，这些都是协议，具体的实现都在每个类中。对于很多只需要抽象接口的地方，不需要知道具体的类是什么，只要这个类实现了这个接口就可以了。

## 关于Java的接口的更多相关文章

1. 深入理解Java的接口和抽象类(转)

深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

2. 深入理解Java的接口和抽象类

深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

3. java微信接口之五—消息分组群发

一.微信消息分组群发接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_t ...

4. java微信接口之四—上传素材

5. android 学习随笔二十七（JNI：Java Native Interface,JAVA原生接口 ）

JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类 ...

6. [转载]深入理解JAVA的接口和抽象类

深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

7. 深入理解Java的接口和抽象类 _摘抄

http://www.cnblogs.com/dolphin0520/p/3811437.html 原文 深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可 ...

8. JAVA 函数式接口与c#委托对应关系（一）

C# Action委托 VS JAVA Action 接口函数 1.c#:Action 封装一个方法,该方法不具有参数并且不返回值. 构造实体类类 using System; namespace Ac ...

9. java设计模式——接口模式

java将接口的概念提升为独立的结构,体现了接口与实现分离.java接口允许多个类提供相同的功能,也允许一个同时实现多个接口.java的接口与抽象类十分相似.java与抽象类中的区别: 1.一个类可以 ...

10. 熟练掌握HDFS的Java API接口访问

HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件(可以存储TB级的文件).HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:She ...

## 随机推荐

1. JS 面向对象、prototype原型的克隆

JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...

2. kettle定时任务_第三方合作方有订单自动发送邮件通知_20161214

由于和第三方合作,需要知道第三方合作方有了订单后通知对方,如果每天查看数据太麻烦了,因此想到了用Kettle定时任务,先判断系统里有没有订单,如果有就执行查询调取订单数据并发送邮件作业,如果没有则不执 ...

3. 家族_NOI导刊2010普及（10）

题目描述 在一个与世隔绝的岛屿上,有一个有趣的现象:同一个家族的人家总是相邻的(这里的相邻是指东南西北四个方向),不同的家族之间总会有河流或是山丘隔绝,但同一个家族的人不一定有相同姓氏.现在给你岛上的 ...

4. gomoblie flappy 源码分析：游戏逻辑

本文主要讨论游戏规则逻辑,具体绘制技术请参看相关文章: gomoblie flappy 源码分析:图片素材和大小的处理 http://www.cnblogs.com/ghj1976/p/5222289 ...

5. Django学习报错记录

1. 运行manage.py任务  makemigrations时,报错: doesn't declare an explicit app_label and isn't in an applicat ...

6. Python 安装包的导入

1.安装适合的pip python安装pip的命令: python -m pip install --upgrade pip安装Python包,的确是pip最为方便了,简单快捷,因为它直接是从pypi ...

7. tp5问题整理