一:接口的概念
二:接口的用法
package com.xx.study1104;
import java.io.OutputStreamWriter;
public class InterfaceTest {
public static void main(String[] args) {
Plane plane=new Plane();
System.out.println(plane.MAX_SPEED);
}
}
interface Flyable{
//全局常量
public static final int MAX_SPEED=7000;//第一宇宙速度
int MIN_SPPED=1;//还是常量 只是省略了前面的public static final
//抽象方法
public abstract void fly();
//省略了public abstract
void stop();
}
interface Attackable {
}
class Plane implements Flyable{
public void fly() {
System.out.println("通过引擎起飞");
}
public void stop() {
System.out.println("驾驶员减速停止");
}
}
//只重写了一个方法,所以是抽象类
abstract class Kite implements Flyable{
public void fly() {
System.out.println("只重写了一个方法");
}
}
class Bullet implements Flyable,Attackable{
public void attact() {
}
public void fly() {
System.out.println("通过引擎起飞");
}
public void stop() {
System.out.println("驾驶员减速停止");
}
}
1.接口使用上也满足多态性
package com.xx.study1104;
public class USBTest {
public static void main(String[] args) {
//接口不能造对象,所以我们造实现类的对象
Computer com=new Computer();
Flash f=new Flash();
com.transferDate(f);
}
}
class Computer{
//将USB对象传进去
public void transferDate(USB usb) {
usb.start();
System.out.println("数据传输的细节");
usb.stop();
}
}
interface USB{
//常量:定义了长,宽,最大最小的传输速度
void start();
void stop();
}
class Flash implements USB{
@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("u盘开启工作");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("u盘结束工作");
}
}
class Printer implements USB{
@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("打印机开启工作");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("打印机结束工作");
}
}
2.创建接口匿名实现类的对象
package com.xx.study1104;
public class USBTest {
public static void main(String[] args) {
//接口不能造对象,所以我们造实现类的对象
//1.创建了接口的非匿名实现类的非匿名对象
Computer com=new Computer();
Flash f=new Flash();
com.transferDate(f);
//2.创建了接口的非匿名实现类的匿名对象
com.transferDate(new Printer());
//3.创建了USB接口的匿名实现类的非匿名对象(phone)
USB phone=new USB() {//大括号加重写方法
@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("手机开启工作");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("手机结束工作");
}
};
com.transferDate(phone);
//4.创建了接口的匿名实现类的匿名对象
com.transferDate(new USB() {
@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("MP3开启工作");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("MP3结束工作");
}
});
}
}
class Computer{
//将USB对象传进去
public void transferDate(USB usb) {
usb.start();
System.out.println("数据传输的细节");
usb.stop();
}
}
interface USB{
//常量:定义了长,宽,最大最小的传输速度
void start();
void stop();
}
class Flash implements USB{
@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("u盘开启工作");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("u盘结束工作");
}
}
class Printer implements USB{
@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("打印机开启工作");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("打印机结束工作");
}
}
三:接口应用:代理模式
package com.xx.study1105;
public class NetWorkTest {
public static void main(String[] args) {
Server server =new Server();
ProxyServer proxyServer=new ProxyServer(server);
proxyServer.browse();
}
}
interface NetWork{
public void browse();
}
class Server implements NetWork{
public void browse() {
System.out.println("我是被代理类");
}
}
class ProxyServer implements NetWork{
private NetWork work;
public ProxyServer(NetWork work) {
super();
this.work = work;
}
public void check() {
System.out.println("联网之前的检查工作");
}
public void browse() {
check();
work.browse();
System.out.println("我是被代理类");
}
}
四:接口练习
1.
x不能重名,所以只能改成super.x,结果为1
五:JDK中的接口
CompareA .java
package com.xx.study1105;
public interface CompareA {
// 静态方法
public static void methods1() {
System.out.println("CompareA:北京");
}
// 默认方法
public default void methods2() {
System.out.println("CompareA:上海");
}
//省略public 并不是缺省
default void methods3() {
System.out.println("CompareA:上海");
}
}
CompareB .java
package com.xx.study1105;
public interface CompareB {
public default void methods3() {
System.out.println("CompareA:苏州");
}
}
SubClassTest .java
package com.xx.study1105;
public class SubClassTest {
public static void main(String[] args) {
SubClass s=new SubClass();
//报错 s.methods1();
//接口中定义的静态方法,只能通过接口来调用
CompareA.methods1();
//通过实现类的对象,可以调用接口中的默认方法
//如果实现类重写了接口中的默认方法,调用时,仍然调用的是重写以后的方法
s.methods2();
s.methods3();
//如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的方法
//那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法
s.methods2();
//如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法
//那么在实现类没有重写此方法的情况下,报错
}
}
class SubClass extends SuperClass implements CompareA{
public void methods2() {
System.out.println("SubClass:杭州");
}
public void methods3() {
System.out.println("SubClass:深圳");
}
}
SuperClass .java
package com.xx.study1105;
public class SuperClass {
public void methods() {
System.out.println("SuperClass:长沙");
}
}
练习
继承的父类优先,假如不重写help方法,就打印父类中的方法。