接口
接口
狭义定义:
interface 接口名{
}
广义定义:接口就相当于定义一个规则 要想使用这个接口 就必须遵循这个规则
注意: (jdk1.8以前的规则)
1.接口中只能声明抽象方法
2.如果你声明一个方法 没写 abstract 系统会默认帮你加上(建议先写上abstract)
3.接口没有构造方法 不能直接实例化对象
4.接口中定义的成员变量默认的修饰符是public static final 即是个常量 可以直接使用接口名去调用
使用接口的关键字 implements(实现接口)
一般来说 接口的实现类 都有后缀 Impl
代码示例:
public class Demo01 {
public static void main(String[] args) {
InterA interA = new InterAImpl();
interA.fun();
}
}
interface InterA{
public static final int num = 10;
public abstract void fun();
}
class InterAImpl implements InterA {
@Override
public void fun() {
System.out.println("我是实现类的 fun方法");
}
}
类和类的关系:类和类是继承关系,只能单继承,可以多层继承
类和接口的关系:类和接口是实现关系,可以单实现也可以多实现
接口和接口的关系
接口和接口是继承关系,可以单继承也可以多继承
测试代码:
interface InterB{
public abstract void fun1();
}
interface InterC{
public abstract void fun2();
}
class InterImpl implements InterB, InterC {
@Override
public void fun1() {
}
@Override
public void fun2() {
}
}
interface InterD extends InterB, InterC {
}
接口小练习:
需求:
public class Demo03 {
public static void main(String[] args) {
DLMainBoard dlMainBoard = new DLMainBoard();
dlMainBoard.run();
dlMainBoard.enterCard(new NetCard());
}
}
abstract class Card{
public abstract void start();
public abstract void stop();
}
interface CardInter {
public abstract void enterCard(Card card);
}
class DLMainBoard implements CardInter{
@Override
public void enterCard(Card card) {
System.out.println("可插卡的主板");
card.start();
card.stop();
}
public void run() {
System.out.println("主板启动");
}
}
class NetCard extends Card{
@Override
public void start() {
System.out.println("开始上网");
}
@Override
public void stop() {
System.out.println("停止上网");
}
}
JDK1.8后接口的新特性(暂时没什么应用场景)
接口中可以声明:
1.抽象方法
2.静态方法
3.默认方法
学习新特性的思路:
1.明确写法
2.明确如何在接口和实现类中调用
3.明确如何使用对象去调用
4.总结要注意什么
抽象类和接口的区别
1.成员变量
抽象类:可以是变量也可以是常量
接口:只能是常量
2.成员方法
抽象类:可以是抽象方法,也可以是普通的成员方法
接口:只能是抽象方法 静态方法 和 默认方法
3.构造方法(抽象类和接口都不能实例化对象)
抽象类:有构造方法,可以被继承
接口:没有构造方法,只能被实现
代码示例如下:
public class Demo04 {
public static void main(String[] args) {
InterX x = new InterXImpl();
x.defaultFun();
InterXImpl interXImpl = (InterXImpl)x;
interXImpl.fun();
InterX.staticFun();
InterXImpl.staticFun();
}
}
interface InterX{
public abstract void print();
public static void staticFun() {
System.out.println("我是接口中 的静态方法 staticFun()");
}
public default void defaultFun() {
System.out.println("我是接口中 的默认方法 defaultFun()");
}
}
class InterXImpl implements InterX{
@Override
public void print() {
System.out.println("我是实现类中 的抽象方法");
}
@Override
public void defaultFun() {
InterX.super.defaultFun();
System.out.println("我是实现类中 的默认方法");
}
public static void staticFun() {
System.out.println("我是实现类中 的静态方法 staticFun()");
}
public void fun() {
InterX.super.defaultFun();
System.out.println("我是实现类中的 特有方法 fun()");
}
}
模板设计模式 — (设计思想)
代码示例:
需求:
学习类 来xx学习 报名缴费 选择学科进行学习(Java H5 VR) 毕业找工作
public class Demo05 {
public static void main(String[] args) {
YZP yzp = new YZP();
yzp.lanOuStudy();
}
}
abstract class Study {
public void lanOuStudy() {
System.out.println("报名缴费");
chooseSubject();
System.out.println("毕业找工作");
}
public abstract void chooseSubject();
}
class YZP extends Study{
@Override
public void chooseSubject() {
System.out.println("选择Java学习");
}
}