概述
本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于接口的相关问题,包括了接口的引入、使用以及代理模式的应用,还有接口和抽象类之间的对比等内容,下面一起来看一下,希望对大家有帮助。
推荐学习:《java视频教程》
一、引入
二、理解
三、使用
class SubClass extends SuperClass implements InterfaceA{ }
登录后复制
代码演示:
public interface Runner {
int ID = 1;//<=>public static final int ID = 1;
void start();//<=>public abstract void start();
public void run();//<=>public abstract void run();
void stop();//<=>public abstract void stop();}
登录后复制
代码演示1:
public void myMethod(){
method3();//调用自己定义的重写的方法
super.method3();//调用的是父类中声明的
//调用接口中的默认方法
CompareA.super.method3();
CompareB.super.method3();
}
登录后复制
代码演示2:
interface Filial {// 孝顺的
default void help() {
System.out.println("老妈,我来救你了");
}}interface Spoony {// 痴情的
default void help() {
System.out.println("媳妇,别怕,我来了");
}}class Father{
public void help(){
System.out.println("儿子,就我媳妇!");
}}class Man extends Father implements Filial, Spoony {
@Override
public void help() {
System.out.println("我该就谁呢?");
Filial.super.help();
Spoony.super.help();
} }
登录后复制
代码演示:
/*
实现类SubAdapter必须给出接口SubInterface以及父接口MyInterface
中所有方法的实现。否则,SubAdapter仍需声明为abstract的。
*/interface MyInterface{
String s=“MyInterface”;
public void absM1();
}interface SubInterface extends MyInterface{
public void absM2();
}public class SubAdapter implements SubInterface{
public void absM1(){System.out.println(“absM1”);}
public void absM2(){System.out.println(“absM2”);}}
登录后复制
代码演示:
interface Runner { public void run();}interface Swimmer {public double swim();}class Creator{public int eat(){…}} class Man extends Creator implements Runner ,Swimmer{
public void run() {……}
public double swim() {……}
public int eat() {……}}
登录后复制
代码演示:
public class Test{
public static void main(String args[]){
Test t = new Test();
Man m = new Man();
t.m1(m);
t.m2(m);
t.m3(m);
}
public String m1(Runner f) { f.run(); }
public void m2(Swimmer s) {s.swim();}
public void m3(Creator a) {a.eat();}}
登录后复制
代码演示:
public class USBTest {
public static void main(String[] args) {
Computer com = new Computer();
//1.创建了接口的非匿名实现类的非匿名对象
Flash flash = new Flash();
com.transferData(flash);
//2. 创建了接口的非匿名实现类的匿名对象
com.transferData(new Printer());
//3. 创建了接口的匿名实现类的非匿名对象
USB phone = new USB(){
@Override
public void start() {
System.out.println("手机开始工作");
}
@Override
public void stop() {
System.out.println("手机结束工作");
}
};
com.transferData(phone);
//4. 创建了接口的匿名实现类的匿名对象
com.transferData(new USB(){
@Override
public void start() {
System.out.println("mp3开始工作");
}
@Override
public void stop() {
System.out.println("mp3结束工作");
}
});
}}class Computer{
public void transferData(USB usb){//USB usb = new Flash();
usb.start();
System.out.println("具体传输数据的细节");
usb.stop();
} }interface USB{
//常量:定义了长、宽、最大最小的传输速度等
void start();
void stop(); }class Flash implements USB{
@Override
public void start() {
System.out.println("U盘开启工作");
}
@Override
public void stop() {
System.out.println("U盘结束工作");
} }class Printer implements USB{
@Override
public void start() {
System.out.println("打印机开启工作");
}
@Override
public void stop() {
System.out.println("打印机结束工作");
} }
登录后复制
四、应用:代理模式(Proxy)
1. 应用场景
2. 分类
3. 代码演示
//举例一:interface Network {
public void browse();
}// 被代理类class RealServer implements Network { @Override
public void browse() {
System.out.println("真实服务器上
网浏览信息");
} }// 代理类class ProxyServer implements Network {
private Network network;
public ProxyServer(Network network) {
this.network = network; }
public void check() {
System.out.println("检查网络连接等操作");}
public void browse() {
check();
network.browse();
} }public class ProxyDemo {
public static void main(String[] args) {
Network net = new ProxyServer(new
RealServer());
net.browse();
} }//举例二:public class StaticProxyTest {
public static void main(String[] args) {
Proxy s = new Proxy(new RealStar());
s.confer();
s.signContract();
s.bookTicket();
s.sing();
s.collectMoney();
}}interface Star {
void confer();// 面谈
void signContract();// 签合同
void bookTicket();// 订票
void sing();// 唱歌
void collectMoney();// 收钱}//被代理类class RealStar implements Star {
public void confer() {
}
public void signContract() {
}
public void bookTicket() {
}
public void sing() {
System.out.println("明星:歌唱~~~");
}
public void collectMoney() {
}}//代理类class Proxy implements Star {
private Star real;
public Proxy(Star real) {
this.real = real;
}
public void confer() {
System.out.println("经纪人面谈");
}
public void signContract() {
System.out.println("经纪人签合同");
}
public void bookTicket() {
System.out.println("经纪人订票");
}
public void sing() {
real.sing();
}
public void collectMoney() {
System.out.println("经纪人收钱");
}}
登录后复制
五、接口和抽象类之间的对比
No. | 区别点 | 抽象类 | 接口 |
---|---|---|---|
1 | 定义 | 包含抽象方法的类 | 主要是抽象方法和全局常量的集合 |
2 | 组成 | 构造方法、抽象方法、普通方法、常量、变量 | 常量、抽象方法、(jdk8.0:默认方法、静态方法) |
3 | 使用 | 子类继承抽象类(extends ) | 子类实现接口(implements ) |
4 | 关系 | 抽象类可以实现多个接口 | 接口不能继承抽象类,但允许继承多个接口 |
5 | 常见设计模式 | 模板方法 | 简单工厂、工厂方法、代理模式 |
6 | 对象 | 都通过对象的多态性产生实例化对象 | 都通过对象的多态性产生实例化对象 |
7 | 局限 | 抽象类有单继承的局限 | 接口没有此局限 |
8 | 实际 | 作为一个模板 | 是作为一个标准或是表示一种能力 |
9 | 选择 | 如果抽象类和接口都可以使用的话,优先使用接口,因为避免单继承的局限 | 如果抽象类和接口都可以使用的话,优先使用接口,因为避免单继承的局限 |
六、经典题目(排错)
//题目一:interface A {
int x = 0;
}class B {
int x = 1;
}class C extends B implements A {
public void pX() {
System.out.println(x);
}public static void main(String[] args) {
new C().pX();
} }//题目二:interface Playable {
void play();
}interface Bounceable {
void play();}interface Rollable extends Playable, Bounceable {
Ball ball = new Ball("PingPang");}class Ball implements Rollable {
private String name;
public String getName() {
return name;
}
public Ball(String name) {
this.name = name;
}
public void play() {
ball = new Ball("Football");
System.out.println(ball.getName());
} }
登录后复制
推荐学习:《java视频教程》
以上就是一文搞懂Java接口的详细内容,更多请关注靠谱客其它相关文章!
最后
以上就是尊敬咖啡豆为你收集整理的一文搞懂Java接口的全部内容,希望文章能够帮你解决一文搞懂Java接口所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复