预备知识:
目录
接口
定义:抽象方法和全局常量的集合,在java中用interface关键字定义
eg.定义一个简单的接口
interface IMessage{
public static final String MSG="I am a Student";//全局常量
public abstract void print();//抽象方法
}
这里有一些小贴士:
为了区分接口,建议在所有接口的前面追加字母I
子类实现一般以impl结尾,表示此类是一个接口的子类
使用原则:
- 子类如果想要实现接口,必须使用implements关键字
- 一个子类可以实现多个接口
- 接口无法直接创建实例化对象需要通过具体子类向上转型为其实例化
- 接口中只允许public权限(不管是属性还是方法 权限都是public)
- 一个抽象类可以使用implements实现多个接口,但接口不能继承抽象类
关于覆写:请看下面一段代码:
interface IMessage{
void print();
}
class Message implements IMessage{
void print(){
System.out.println(" I am a Student.");
}
}
public class Test{
public static void main(Stirng[] args){
IMessage m=new Message();
m.print();
Message n=(Message) m;
n.print();
}
接口中权限更加严格了,所以print()方法不能被覆写。编译无法执行!
建议:接口中属性和方法 不加public和其他修饰符号 来保持代码的简洁性
子类继承抽象类实现接口:
步骤:
STEP1:使用extends继承一个抽象类
STEP2:使用implements实现多个接口
import javax.swing.*;
interface IMessage{
void print();
}
abstract class News{
//抽象类中方法前面的abstract不能省略 否则就是普通方法啦!
public abstract void getNews();
}
class MessageImpl extends News implements IMessage{
public void print(){
System.out.println(" I am a Student.");
}
public void getNews(){
System.out.println("I am News.");
}
}
public class Test{
public static void main(String[] args) {
IMessage m=new MessageImpl();//向上转型
m.print();
//MessageImpl是抽象类和接口的共同子类
News news=(News)m;//向下转型
news.getNews();
}
}
运行结果:
I am a Student.
I am News.
一个接口使用extends继承实现多个父接口
interface A{
public void printA();
}
interface B{
public void printB();
}
interface C extends A,B{
public void printC();
}
class Impl implements C{
public void printA(){
System.out.println("A");
}
public void printB(){
System.out.println("B");
}
public void printC(){
System.out.println("C");
}
}
public class Test{
public static void main(String[] args) {
A a=new Impl();
B b=new Impl();
C c=new Impl();
a.printA();
b.printB();
c.printC();
}
}
接口的应用:
接口在实际开发过程中有三大核心应用环境:
1.定义操作标准
2.表能力
3.分布式开发中暴露远程服务方法
接口描述标准:
interface USB{
void setup();//安装USB驱动
void work();//进行工作
}
class Computer{
public void plugin(USB usb){
usb.setup();
usb.work();
}
}
class UDisk implements USB{
public void setup(){
System.out.println("安装u盘驱动");
}
public void work(){
System.out.println("u盘开始工作");
}
}
class PrintDisk implements USB{
//定义一个USB设备
public void setup(){
System.out.println("安装打印机驱动");
}
public void work(){
System.out.println("打印机开始工作");
}
}
public class Test{
public static void main(String[] args) {
Computer computer = new Computer();
computer.plugin(new UDisk());
computer.plugin(new PrintDisk());
}
}
输出结果:
安装u盘驱动
u盘开始工作
安装打印机驱动
打印机开始工作
抽象类和接口的区别: