其实刚开始听到接口的时候不解其意,为什么要有接口这个东西,加之老师上课我可能没仔细听(或者时间长了忘了?),这次看到了“用接口设计并实现圆,三角形,矩形的面积与周长计算”这个题目的代码,它将接口定义在了源代码最首的部分,并且是定义成了抽象类。

  1. interface Shape{
  2. public abstract double getArea();
  3. public abstract double getCircumference();
  4. }

接下来是全部的代码(来源于百度):

  1. package javaapplication3;
  2. import java.util.Scanner;
  3. interface Shape{
  4. public abstract double getArea();
  5. public abstract double getCircumference();
  6. }
  7.  
  8. class Circle implements Shape {
  9. private double r=0;
  10. public Circle(double r) {
  11. this.r=r;}
  12. public double getR(){
  13. return this.r; }
  14. public double getArea() {
  15. return (3.14*this.r*this.r);}
  16. public double getCircumference(){
  17. return 2*3.14*this.r;
  18. }
  19. }
  20.  
  21. class Triangle implements Shape {
  22. private double a=0;
  23. private double b=0;
  24. private double c=0;
  25. public Triangle(double a, double b, double c) {
  26. this.a=a;
  27. this.b=b;
  28. this.c=c;}
  29. public double getA() {
  30. return this.a;}
  31. public double getB() {
  32. return this.b;}
  33. public double getC() {
  34. return this.c;}
  35. public double getArea() {
  36. // 根据海伦公式求三角形的面积
  37. double p=(a+b+c)/2;
  38. return Math.pow(p*(p-a)*(p-b)*(p-c),0.5);}
  39. public double getCircumference(){
  40. return this.a+this.b+this.c;
  41. }
  42. }
  43.  
  44. class Rentangle implements Shape{
  45. public double height=0;
  46. public double width=0;
  47. public Rentangle(double height, double width){
  48. this.height = height;
  49. this.width = width;}
  50. public double getHeight(){
  51. return this.height; }
  52. public double getWidth(){
  53. return this.width;}
  54. public double getArea(){
  55. return this.height*this.width;
  56. }
  57. public double getCircumference(){
  58. return 2*(this.height+this.width);
  59. }
  60. }
  61.  
  62. public class testshape {
  63. public static void main(String[] args){
  64. Scanner input = new Scanner(System.in);
  65. double r=0;
  66. double a=0;
  67. double b=0;
  68. double c=0;
  69. double height=0;
  70. double width=0;
  71. do{
  72. System.out.println("请输入圆的半径r:");
  73. r= input.nextDouble();
  74. if (r<=0) {
  75. System.out.print("输入错误!!!");
  76. }
  77. }while (r<=0);
  78.  
  79. do {
  80. System.out.println("请输入三角形的三条边a、b、c:");
  81. a= input.nextDouble();
  82. b= input.nextDouble();
  83. c= input.nextDouble();
  84. if (a<0||b<0||c<0||a+b<=c||a-b>=c) {
  85. System.out.print("输入错误!!!");
  86. }
  87. } while ((a<0||b<0||c<0||a+b<=c||a-b>=c));
  88.  
  89. do {
  90. System.out.println("请输入矩形的长和宽height、width:");
  91. height= input.nextDouble();
  92. width= input.nextDouble();
  93. if (height<=0||width<=0) {
  94. System.out.print("输入错误!!!");
  95. }
  96. } while (height<=0||width<=0);
  97.  
  98. Circle C=new Circle(r);
  99. Triangle T=new Triangle(a,b,c);
  100. Rentangle R=new Rentangle(height,width);
  101.  
  102. System.out.println("******圆*******");
  103. System.out.println("半径: " + C.getR());
  104. System.out.println("面积 : " + C.getArea());
  105. System.out.println("周长 : " + C.getCircumference());
  106.  
  107. System.out.println("*******三角形*******");
  108. System.out.println("三边为: " + T.getA()+","+T.getB()+","+T.getC());
  109. System.out.println("面积 : " + T.getArea());
  110. System.out.println("周长 : " + T.getCircumference());
  111.  
  112. System.out.println("*******矩形*******");
  113. System.out.println("长: " + R.getHeight());
  114. System.out.println("宽: " + R.getWidth());
  115. System.out.println("面积 : " + R.getArea());
  116. System.out.println("周长 : " + R.getCircumference());
  117. }
  118. }

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微信接口之四—上传素材

    一.微信上传素材接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=A ...

  5. android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )

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

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

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

  7. Java序列化接口的作用总结

    一个对象有对应的一些属性,把这个对象保存在硬盘上的过程叫做”持久化”. 把堆内存中的对象的生命周期延长,存入硬盘,做持久化操作.当下次再需要这个对象的时候,我们不用new了,直接从硬盘中读取就可以了. ...

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

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

  9. JAVA 函数式接口与c#委托对应关系(一)

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

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

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

随机推荐

  1. 雷林鹏分享:C# 基本语法

    C# 基本语法 C# 是一种面向对象的编程语言.在面向对象的程序设计方法中,程序由各种相互交互的对象组成.相同种类的对象通常具有相同的类型,或者说,是在相同的 class 中. 例如,以 Rectan ...

  2. 请问WCF 跟 WebService之间的相同跟异同

    https://social.msdn.microsoft.com/Forums/zh-CN/c06420d1-69ba-4aa6-abe5-242e3213b68f/wcf-webservice W ...

  3. PHP个人博客项目------切切歆语博客

    php+mysql+apache, ThinkPHP3.2框架开发 我的个人博客项目 适合新手练习 源码地址下载:https://github.com/DickyQie/php-myblog

  4. memcached的部署

    window下memcached注册服务 cmd:在学习Memcached时,为了模拟分布存储,常常需要建多个Memcached服务,如何建呢,只能使用命令行了 以管理员身份运行cmd,输入如下命令 ...

  5. 4.1.3 Euclid's Game (POJ 2348)

    Problem description: 以辗转相除法为基础,给定两个整数a和b,Stan和Ollie轮流从较大的数字中减去较小数字的倍数(整倍数),并且相减后的结果不能为零.Stan先手,在自己的回 ...

  6. Runable和Thread

    Java多线程 java中有两种实现多线程的方式: 1. 一种是通过继承Thread类,同时重写run()方法.但是java中,只允许单继承,也就是一个类只能继承一个父类,使得该方式具有一定的局限性, ...

  7. 『cs231n』卷积神经网络工程实践技巧_下

    概述 计算加速 方法一: 由于计算机计算矩阵乘法速度非常快,所以这是一个虽然提高内存消耗但是计算速度显著上升的方法,把feature map中的感受野(包含重叠的部分,所以会加大内存消耗)和卷积核全部 ...

  8. hadoop集群添加新节点

    0.说明 Hadoop集群已经运行正常,现在新买了一些机子,要加入到集群里面增加新的节点.以下就是增加的过程. 1.配置运行环境 安装与master和其他slave相同的java环境,jdk版本要相同 ...

  9. kohana task 编写计划任务

    kohana 框架  我们经常使用gleez作为我们二次开发. 收先我们要把文件建在Task文件夹下,比如新建文件为:testcron <?phpdefined('SYSPATH') or di ...

  10. Hadoop 2.7.3 完全分布式维护-简单测试篇

    1. 测试MapReduce Job 1.1 上传文件到hdfs文件系统 $ jps Jps SecondaryNameNode JobHistoryServer NameNode ResourceM ...