博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象————接口
阅读量:6079 次
发布时间:2019-06-20

本文共 2114 字,大约阅读时间需要 7 分钟。

接口是另一种定义数据类型的方式。它和类非常相似的。

相同之处:都有成员变量和成员方法

             也可以形成继承关系

不同之处:接口中的属性都是常量(final)

             接口中的方法是抽象方法(没有方法体)

引入接口的原因:只支持单重继承,每个类只能有一个超类。但实际应用中有时候需要多重继承--使用接口,一个类可以实现多个接口。

接口的定义

[public] (表示可以被不同包中的类或接口使用,缺省时具有包内可访问性) interface(interface关键字表示接口)  接口名(任意有效标识符 ) [extends (接口支持多继承,多个父接口之间用逗号分隔)父接口1,父接口2,…]{

       [public][static][final]  数据类型   属性名=常量值;

       [public abstract]   返回值类型 方法名([形参表]);

接口的属性必须用public static final修饰,是系统默认的,可部分省略或全部省略,但一般都写出final。

int  MAX_SIZE = 50;  等价于
public static final  int  MAX_SIZE = 50;

接口的方法默认为public abstract,一般不写修饰符,可省略--接口中的方法都是抽象方法。

例5.19 接口的定义。

public interface Figure {

         final double pi=3.14;

         abstract void area();

}

 实现接口

   接口定义后不能直接创建对象,必须由类实现接口后创建类的对象。每个类只能继承一个基类,但可以实现多个接口。类定义形式如下:

[public]  class 类名 extends 基类 implements (可实现多个接口,多个接口之间用逗号分隔

)接口1,…{

      //类体

}(注意:类实现接口,就继承了接口中的所有成员变量和成员方法。由于接口中的方法都是抽象的,因此实现接口的类必须重写这些方法。)

public class Circle implements Figure{

         double radius;

         public Circle(double r){

                radius=r;

         }

         public void area(){

               System.out.println("圆的面积="+pi*radius*radius);  

         }

}

 

注意:

实现接口中的抽象方法时,除去掉关键字abstract外,方法头必须和接口定义中的方法头完全相同,并且public修饰符不能省略。

如果类实现了多个接口,必须重写这些接口中的所有方法。

接口不是类,不能使用new实例化接口,但可以声明接口变量。接口变量可以指向一个实现了该接口的类的对象,例如,

Shape s=new Shape();          //错
Shape s=new Circle();            //对 

可以使用instanceof来判断对象是否实现了某个接口。

虽然可以使用接口变量来引用实现接口类的对象,但这种引用只能引用接口的成员,否则会发生编译错误。

例如,class Rectangle implements Shape{}

Shape s;

s=new Circle();           s.area();

s=new Rectangle();    s.area();

强调:一个接口定义一个协定,实现接口的类必须遵守其协定。接口最适合为不相关的类提供通用功能,利用接口提供的方法,程序可以多态地处理这些完全不同的类的对象。

接口的继承

      接口具有多重继承的特点,即一个接口可以有多个父接口。新的子接口继承所有父接口的全部方法和常量。接口继承的格式为:

[public] interface 子接口  extends  父接口1,父接口2,…{

           //静态属性;

           //抽象方法;

}

接口和抽象类

接口和抽象类很像,它们都具有如下特征:

接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。

接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。

区别

设计目的不同

接口体现的是一种规范,类似于整个系统的“总纲”,它制定了系统各模块应该遵循的标准 。因此一个系统中的接口不应该经常改变 

抽象类作为多个子类的共同父类,体现的是模板式设计。抽象类可以被当成系统实现过程中的中间产品,这个中间产品已经实现了部分功能,但这个产品还不能当成最终产品,必须更进一步的完善,这种完善可能有几种不同方式。 

用法不同

(1)接口里只能包含抽象方法

(2)接口里不能定义静态方法

(3)接口里只能定义静态常量属性

(4)接口不包含构造方法

(5)接口里不能包含初始化块

(6)一个类可以实现多个接口

(1)抽象类可以包含普通方法。

(2)抽象类可以定义静态方法 

(3)抽象类既包含普通属性,也可以包含静态常量属性 

(4)抽象类里构造方法不用于创建对象,是让子类调用

(5)抽象类可以包含初始化块 

(6)一个只能继承一个父类

 

 

转载于:https://www.cnblogs.com/Smile-123/p/5532510.html

你可能感兴趣的文章
SSH Secure Shell Client中文乱码的解决方法
查看>>
[Nagios] Error: Template 'timman' specified in contact definition could not be not found (c
查看>>
iOS开发UI篇—推荐两个好用的Xcode插件(提供下载链接)
查看>>
ios成长之每日一遍(day 8)
查看>>
iOS开发UI篇—UIScrollView控件实现图片轮播
查看>>
jQuery源码分析系列(33) : AJAX中的前置过滤器和请求分发器
查看>>
IP地址的分类——a,b,c 类是怎样划分的
查看>>
编译Boost 详细步骤
查看>>
spring-mybatis-data-common程序级分表操作实例
查看>>
秒杀多线程第四篇 一个经典的多线程同步问题
查看>>
[连载]JavaScript讲义(03)--- JavaScript面向对象编程
查看>>
Redis 性能问题的记录
查看>>
有用的U盘修复工具
查看>>
挖一挖C#中那些我们不常用的东西之系列(4)——GetHashCode,ExpandoObject
查看>>
Android Activity初探
查看>>
VC++ CopyFile函数使用方法
查看>>
Android 环境搭建 版本问题
查看>>
android WebView总结
查看>>
JS获取客户端IP地址、MAC和主机名七种方法
查看>>
Python:使用基于事件驱动的SAX解析XML
查看>>