版权声明:尊重原创,码字不易,转载需博主同意。 https://blog.csdn.net/qq_34626097/article/details/83476698
java 接口(interface)的应用详解
1.java 接口(interface)
- 接口(interface)是与类并行的一个概念
- 接口的主要用途就是被实现类实现。(面向接口编程)
2.java 接口(interface)使用的知识点
- 接口可以看做是一个特殊的抽象类。是常量与抽象方法的一个集合,不能包含变量、一般的方法;
- 接口是没有构造器的。
- 接口定义的就是一种功能,这个功能可以是被类所实现(implements)
如:class CC extends DD implements A - 实现接口的类,必须重写其中的所有的抽象方法,方可实例化,若没有重写所有的抽象方法,则此类仍为抽象类
- 类可以实现多个接口。 -----java 中类的继承是单继承的
- 接口与接口之间也是继承关系,而且可以实现多继承性
注:5,6描述的是java中的继承的特点 - api中的Collection、Comparable就是一个接口
- 接口中的所有成员变量都默认是由public static final修饰的。
- 接口中的所有方法都默认是由public abstract修饰的
public class TestInterface {
public static void main(String[] args) {
System.out.println(A.I);//可以直接输出
}
}
interface A{
//常量:所有的都是用public static final
// 可以省略前面的声明 public static final
int I = 1;
public static final boolean FLAG = false;
//抽象方法:所有的抽象方法都用public abastract修饰,可以省略
public abstract void method1();
void method2();
}
abstract class BB implements A{
}
class DD{
}
interface MM{
}
class CC extends DD implements A,MM{
public void method1() {
}
// void method2() {
// 权限不能小于接口定义的,所以只能定义为public
// }
public void method2() {
}
}
//接口之间仍为继承关系!(而且可以多继承)
interface JJ extends MM,A{
void method4();
}
8.接口与具体的实现类之间也存在多态性
//接口与具体的实现类直接也存在多态性
public class TestInterface1 {
public static void main(String[] args) {
Duck d = new Duck();
TestInterface1.test1(d);
TestInterface1.test2(d);
TestInterface1.test3(d);
}
public static void test1(Runner r) {//Runner r = new Duck();
r.run();//虚拟方法调用
}
public static void test2(Swimmer s) {//Swimmer s = new Duck();
s.swim();;
}
public static void test3(Flier f) {//Flier f = new Duck();
f.fly();
}
}
interface Runner{
public abstract void run();
}
interface Swimmer{
void swim();
}
interface Flier{
void fly();
}
class Duck implements Runner,Swimmer,Flier{
@Override
public void fly() {
System.out.println("丑小鸭也可以会变成白天鹅!");
}
@Override
public void swim() {
System.out.println("红掌拨清波");
}
@Override
public void run() {
System.out.println("鸭子屁股扭扭的走路");
}
}
3.接口使用总结
- 通过接口可以实现不相关的类的相同行为,而不需要考虑这些类之间的层次关系
- 通过接口可以指明多个类需要实现的方法,一般用于定义对象的扩张功能。
- 接口主要用来定义规范,接触耦合关系。如:高通。
4.结果的应用和 实现接口的匿名类对象
//接口应用
public class TestUSB {
/*输出结果:
* U盘开始工作
此设备开始工作....
U盘结束工作
U盘开始工作
此设备开始工作....
U盘结束工作
手机开始工作
此设备开始工作....
开机结束工作
*/
public static void main(String[] args) {
Computer c = new Computer();
c.doWork(new Flash());
Flash f = new Flash();
c.doWork(f);
//实现接口的匿名类对象
USB phone = new USB(){
@Override
public void start() {
System.out.println("手机开始工作");
}
@Override
public void stop() {
System.out.println("开机结束工作");
}
};
c.doWork(phone);
}
}
//这里为标准
interface USB{
//USB尺寸的大小,可以设置为常量
//功能设置为抽象
void start();
void stop();
}
class Computer{
public void doWork(USB usb) {
usb.start();
System.out.println("此设备开始工作....");
usb.stop();
}
}
class Printer implements USB{
public void start() {
System.out.println("打印机开始工作");
}
public void stop() {
System.out.println("打印机结束工作");
}
}
class Flash implements USB{
public void start() {
System.out.println("U盘开始工作");
}
public void stop() {
System.out.println("U盘结束工作");
}
}