关于Java的接口
其实刚开始听到接口的时候不解其意,为什么要有接口这个东西,加之老师上课我可能没仔细听(或者时间长了忘了?),这次看到了“用接口设计并实现圆,三角形,矩形的面积与周长计算”这个题目的代码,它将接口定义在了源代码最首的部分,并且是定义成了抽象类。
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的接口的更多相关文章
- 深入理解Java的接口和抽象类(转)
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- 深入理解Java的接口和抽象类
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- java微信接口之五—消息分组群发
一.微信消息分组群发接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_t ...
- java微信接口之四—上传素材
一.微信上传素材接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=A ...
- android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )
JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类 ...
- [转载]深入理解JAVA的接口和抽象类
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- Java序列化接口的作用总结
一个对象有对应的一些属性,把这个对象保存在硬盘上的过程叫做”持久化”. 把堆内存中的对象的生命周期延长,存入硬盘,做持久化操作.当下次再需要这个对象的时候,我们不用new了,直接从硬盘中读取就可以了. ...
- 深入理解Java的接口和抽象类 _摘抄
http://www.cnblogs.com/dolphin0520/p/3811437.html 原文 深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可 ...
- JAVA 函数式接口与c#委托对应关系(一)
C# Action委托 VS JAVA Action 接口函数 1.c#:Action 封装一个方法,该方法不具有参数并且不返回值. 构造实体类类 using System; namespace Ac ...
- java设计模式——接口模式
java将接口的概念提升为独立的结构,体现了接口与实现分离.java接口允许多个类提供相同的功能,也允许一个同时实现多个接口.java的接口与抽象类十分相似.java与抽象类中的区别: 1.一个类可以 ...
随机推荐
- C#后台Post提交XML 及接收该XML的方法
//发送XML public void Send(object sender, System.EventArgs e) { string WebUrl = "http:/ ...
- Count Up Down(上下计数)
这个题目是 Kayak 发布的代码挑战题目. 最简单的描述就是不使用循环,输出 0 到 5,然后同样不是会用循环的方式再次输出 5 到 0. 英文描述 Part 1 Write a program t ...
- php绝对路径转相对路径
/** * 绝对路径转成相对 路径 * $path相对于$base的相对路径 * @param string $base * @param string $path * 思路:去除共同部分 */ fu ...
- 6月6 Smarty练习----设置题目及打印试卷
所需要的数据库表格:shiti, shititimu, timu, kemu, xuanxiang 考试试题的设置: 考试试题后台:ksset.php <?php include(" ...
- stl常用的查找算法
#include<iostream> using namespace std; #include"vector" #include"algorithm&quo ...
- 创建springboot的聚合工程(三)
springboot聚合工程之添加mybatis数据库持久化操作 在boot-polymer-repository工程添加mybatis的相关依赖 <project xmlns="ht ...
- 解决validaform先验证后 ajax提交
$(".myfroms").Validform({//form class btnSubmit:".submitLayer", 绑定提交按钮 tiptype:4 ...
- CentOS是哪个版本 CentOS版本信息查看技巧
root@MyMail ~ # uname Linux root@MyMail ~ # uname -r 2.6.18-164.el5 [root@localhost ~]# uname -a Lin ...
- 依赖注入 IOC
首先,明确下IoC是什么东西: 控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心. 控 ...
- iOS runtime实用篇--和常见崩溃say good-bye!
程序崩溃经历 其实在很早之前就想写这篇文章了,一直拖到现在. 程序崩溃经历1 我们公司做的是股票软件,但集成的是第三方的静态库(我们公司和第三方公司合作,他们提供股票的服务,我们付钱).平时开发测试的 ...