(二十八)、接口
来源:互联网 发布:ubuntu qq国际版 编辑:程序博客网 时间:2024/04/29 02:14
概念
抽象类可以理解为是从多个类中抽象出来的模板,不但允许有抽象方法,还可以有变量和普通方法等。如果抽象的更彻底,只留下常量和抽象方法,则此时的抽象类有了新的名字:接口。
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含静态常量和方法的定义,而没有变量和方法的实现。
接口是抽象方法和静态常量的集合!
public interface Pet { public static final int A = 10; public abstract void eat(); public abstract void play(); }
接口的声明
- 接口声明语法:
[权限修饰符] interface 接口名 [extends 父接口1, 父接口2] {
//零到多个常量定义… int MAX = 1; //定义变量,系统会自动添加public static final,把变量变成常量 public static final int MAX1 = 1; //与上面定义的效果一样 //零到多个抽象方法定义… void speak(); //声明抽象方法,可以省略 public 和abstract的修饰符 public abstract void speak1(); //与上面效果一样 String test(int a); //可以有返回值,也可以传递参数 }
实现
由于接口只有抽象方法,所以接口与抽象类一样不能直接创建对象。我们一般说抽象类的子类,说接口的实现类。
一个类实现接口使用关键字implements。语法格式:
[public][abstract] class 类名 implements 接口1, 接口2 …
说明:
1、 实现接口必须使用关键字implements。
2、 一个类可以实现多个接口,多个接口之间使用英文逗号隔开。
3、 类实现接口支持多实现。实现类必须实现所有接口的所有抽象方法,如果不能完全实现,则该类必须标记为抽象类。
4、 一个类实现多个接口的同时,还可以来继承一个类。继承类的时候写法是:必须先写继承,再写实现。
说明:
1、 权限修饰符,和class的权限修饰符相同,只有public和default两种。如果是default,则对同一包内其他类或接口可见。
2、 interface 标示接口的关键字。
3、 extends 后面跟接口列表,表示该接口继承的父接口。接口只能继承接口,不能继承类。多个父接口之间用英文的”,”(逗号)隔开。
4、 声明常量时可以像声明变量一样声明,但是系统会自动把该变量转成常量
5、 声明抽象方法。修饰符可以完全省略,系统会默认接口中的所有方法均是public abstract的,如果一定要添加修饰符,只能添加public和abstract
用途
(1)通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系.
(2)通过接口指明多个类需要实现的方法
(3)通过接口了解对象的交互界面,而无需了解对象所对应的类
(4)使用接口,具体代码可以不依赖具体实现类,当具体实现类有变化时,代码不需调整。使用接口使软件更容易扩展。
面向对象的最高境界,是面向接口编程
Demo:
Pet.java
//只能有静态方法和常量public interface Pet { public static final int A = 10; public abstract void eat(); public abstract void play();}
Dog.java
public class Dog implements Pet { @Override public void eat() { System.out.println("狗在吃"); } @Override public void play() { System.out.println("狗在陪人玩"); }}
Main.java
public class Main { public static void main(String[] args) { Dog dog = new Dog(); dog.eat(); dog.play(); }}
注意:
1.类实现接口的时候,必须实现接口的所有抽象方法,如果没有全部实现,则这个类要标记为抽象类
2.接口可以继承接口,可以把父类的抽象方法继承过来
3.java中继承是单继承,多实现。接口可以继承或实现多个接口,类与类只能单继承
4.在接口中,静态常量的修饰符public static final均可以省略。省略之后也是public静态常量
5.抽象方法的public abstract也可以省略。省略之后也是public抽象方法
6.实际开发中,一般省略这些修饰符
7.一个类可以继承一个类的同时实现多个接口
8.在既有继承又有实现的时候,必须是先继承再实现。
- (二十八)、接口
- 十八感悟(二)
- (二十八)海阔天空
- 日拱一卒(二十八)
- Golang教程:(十八)接口
- CUDA编程接口(二)------一十八般武器------GPU的革命
- (CUDA 编程6).CUDA编程接口(二)------一十八般武器
- 学习笔记(二十八)
- 英语口语收集(二十八)
- 八-十八-二十八
- 【Java安全技术探索之路系列:Java可扩展安全架构】之十八:JGSS(二):JGSS类和接口
- 钩子初接触(二十八)
- NeHe OpenGL教程 (二十八)
- 凤凰涅磐(二十八-三十)
- 软件工程视频学习笔记(二十八)
- C核心技术手册(二十八)
- JAVA学习笔记(二十八)
- jQuery - noConflict() 方法(二十八)
- String类,Stringbuilder类,Stringbuffer类之间的区别
- RCNN FastRCNN FasterRCNN 等配置和训练 参考
- 2016多校8 hdu5821 Ball 智商题
- Python-字符串
- c#!连!接!sql!server!200!8!的!几!种方式
- (二十八)、接口
- 如何设置vs窗口的属性管理器和解决方案管理器的位置
- Java之抽象类
- 【BZOJ 1036】树的统计Count(树链剖分)
- 编程基础知识科普:C#中的问号运算符
- 使用JavaScript与servlet实行简单的客户端和服务器验证
- hdu3007Buried memory 最小圆覆盖 计算几何
- 二分法查找
- freemarker用list函数循环列表并在指定位置跳出,即控制list循环个数