目录
一、接口的使用
二、接口的实现
三、接口的应用:代理模式(Proxy)
3.1 实现代码
3.2 应用场景
3.3 分类
四、接口与抽象类之间的对比
五、Java 8 中关于接口的改进
六、内部类的介绍
6.1 内部类的分类
6.2 成员内部类
一、接口的使用
① 在Java中接口使用interface来定义。
② 接口和类是并列的两个结构。
③ 接口中不能定义构造器(这也意味着接口不能实例化)。
④ 在Java开发中,接口通过让类去实现implements的方法来使用。
如果:实现类覆盖了接口中所有的抽象方法,则此实现类就可以实例化;实现类没有覆盖接口中所有的抽象方法,则实现类仍然是一个抽象类。
⑤ Java可以实现多个接口(这也弥补了Java单继承的局限性)
格式:class A extends B implement C,D,E;
⑥ 接口与接口之间是继承(可以多继承)
⑦ 接口的具体使用,体现多态性。
⑧ 接口实际上可以看作一种规范。
二、接口的实现
package cn.spilt_charging.contact;
public class interfaceTest {
public static void main(String[] args) {
System.out.println(CAR.MAX_SPEED); // 输出结果:180
System.out.println(CAR.MIN_SPEED); // 输出结果:1
CAR car = new CAR();
car.move(); // 输出结果:汽车发动
car.stop(); // 输出结果:驾驶员停下了车
}
}
interface CARable{
//全局变量
public static final int MAX_SPEED = 180;
int MIN_SPEED = 1; // 省略了 public static final
//抽象方法
public abstract void move();
void stop(); //省略了public abstract
}
interface Accelerateable{
void accelerate();
}
class CAR implements CARable{
@Override
public void move() {
System.out.println("汽车发动");
}
@Override
public void stop() {
System.out.println("驾驶员停下了车");
}
}
abstract class CAR_1 implements CARable{
@Override
public void move() {
}
}
class CAR_2 extends Object implements CARable,Accelerateable,Cc{
//Java可以实现多个接口(这也弥补了Java单继承的局限性),但要重写接口中所有的方法
@Override
public void move() {
}
@Override
public void stop() {
}
@Override
public void accelerate() {
}
@Override
public void IDE1() {
}
@Override
public void IDE2() {
}
}
interface Aa{
void IDE1();
}
interface Bb{
void IDE2();
}
interface Cc extends Aa,Bb{
}
三、接口的应用:代理模式(Proxy)
代理模式是Java开发中使用较多的一种设计模式。代理设计就是为其他对象提供一种代理以控制对这个对象的访问。
3.1 实现代码
package cn.spilt_charging.contact;
public class ProxyTest {
public static void main(String[] args) {
MOTOR motor = new MOTOR();
//motor.start();
ProxyMOTOR proxyMOTOR = new ProxyMOTOR(motor);
proxyMOTOR.start();
//输出结果:汽车出发前的检查工作 发动汽车
}
}
interface Engine{
public void start();
}
//被代理类
class MOTOR implements Engine{
@Override
public void start() {
System.out.println("发动汽车");
}
}
//代理类
class ProxyMOTOR implements Engine{
private Engine engine;
public ProxyMOTOR(Engine engine) {
this.engine = engine;
}
public void check() {
System.out.println("汽车出发前的检查工作");
}
@Override
public void start() {
check();
engine.start();
}
}
3.2 应用场景
① 安全代理:屏蔽对真实角色的直接访问。
② 远程代理:通过代理类处理远程方法调用(RMI)。
③ 延迟加载:先加载轻量级的代理对象,真正需要在加载真实对象。
3.3 分类
静态代理(静态定义代理类)、动态代理(动态生成代理类)、JDK自带的动态代理
四、接口与抽象类之间的对比
五、Java 8 中关于接口的改进
Java 8 中,可以使用接口添加静态方法和默认方法。
静态方法:
使用static关键字修饰。可以通过接口直接调用静态方法,并执行其方法体。
默认方法:
使用default关键字修饰,可以通过实现类对象来调用。
六、内部类的介绍
Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B就是外部类。
6.1 内部类的分类
内部类分成:成员内部类和局部内部类(方法内、代码块内、构造器内)
6.2 成员内部类
① 作为外部类的成员:
(1)调用外部类的结构
(2)可以被static修饰
(3)可以被4种不同的权限修饰
② 作为一个类:
(1) 类中可以定义属性、方法、构造器等
(2) 可以被final 修饰,表示此类不能被继承
(3) 可以使用abstract 修饰
最后到这里,文章就结束了,如果在内容上有问题,恳请各位大佬指出。