关于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# 基本语法
C# 基本语法 C# 是一种面向对象的编程语言.在面向对象的程序设计方法中,程序由各种相互交互的对象组成.相同种类的对象通常具有相同的类型,或者说,是在相同的 class 中. 例如,以 Rectan ...
- 请问WCF 跟 WebService之间的相同跟异同
https://social.msdn.microsoft.com/Forums/zh-CN/c06420d1-69ba-4aa6-abe5-242e3213b68f/wcf-webservice W ...
- PHP个人博客项目------切切歆语博客
php+mysql+apache, ThinkPHP3.2框架开发 我的个人博客项目 适合新手练习 源码地址下载:https://github.com/DickyQie/php-myblog
- memcached的部署
window下memcached注册服务 cmd:在学习Memcached时,为了模拟分布存储,常常需要建多个Memcached服务,如何建呢,只能使用命令行了 以管理员身份运行cmd,输入如下命令 ...
- 4.1.3 Euclid's Game (POJ 2348)
Problem description: 以辗转相除法为基础,给定两个整数a和b,Stan和Ollie轮流从较大的数字中减去较小数字的倍数(整倍数),并且相减后的结果不能为零.Stan先手,在自己的回 ...
- Runable和Thread
Java多线程 java中有两种实现多线程的方式: 1. 一种是通过继承Thread类,同时重写run()方法.但是java中,只允许单继承,也就是一个类只能继承一个父类,使得该方式具有一定的局限性, ...
- 『cs231n』卷积神经网络工程实践技巧_下
概述 计算加速 方法一: 由于计算机计算矩阵乘法速度非常快,所以这是一个虽然提高内存消耗但是计算速度显著上升的方法,把feature map中的感受野(包含重叠的部分,所以会加大内存消耗)和卷积核全部 ...
- hadoop集群添加新节点
0.说明 Hadoop集群已经运行正常,现在新买了一些机子,要加入到集群里面增加新的节点.以下就是增加的过程. 1.配置运行环境 安装与master和其他slave相同的java环境,jdk版本要相同 ...
- kohana task 编写计划任务
kohana 框架 我们经常使用gleez作为我们二次开发. 收先我们要把文件建在Task文件夹下,比如新建文件为:testcron <?phpdefined('SYSPATH') or di ...
- Hadoop 2.7.3 完全分布式维护-简单测试篇
1. 测试MapReduce Job 1.1 上传文件到hdfs文件系统 $ jps Jps SecondaryNameNode JobHistoryServer NameNode ResourceM ...