一、深入接口
1.1知识点
类 - 接口:
类 与 类:单继承
类 与 接口:多实现
接口 与 接口:多继承
1.2面试题
1.一个类可以实现多个接口?
可以
2.一个接口可以实现多个接口?
不可以
3.接口里面的方法不一定都是抽象的?
接口中只能有静态常量和抽象方法JDK1.8开始接口中允许有静态方法和默认方法
4.接口解决了类的单继承问题?
对的
5.一个类是否可以继承一个类并同时实现多个接口?
可以
6.接口可以new对象?
不可以,创建的是匿名内部类的对象
1.底层创建了匿名类,并实现了I5接口中的i5Method01()方法
2.创建匿名实现类的对象,并把地址赋值给i5引用
1.2.1接口类
package com.qf.test01;
public interface I5 {
public void i5Method01();
}
1.2.2测试类
package com.qf.test01;
public class Test01 {
public static void main(String[] args) {
I5 i5 = new I5() {
@Override
public void i5Method01() {
System.out.println("xxxx");
}
};
i5.i5Method01();
A a = new A();
a.method03();
}
}
1.3接口多继承
package com.qf.test01;
public interface I1 {
public void i1Method01();
public void method01();
public void method02(int i);
default void method03(){
System.out.println("i1接口中的默认方法");
}
}
package com.qf.test01;
public interface I2 {
public void i2Method01();
public void method01();
public void method02(String i);
default void method03(){
System.out.println("i2接口中的默认方法");
}
}
package com.qf.test01;
//接口的多继承(一个接口可以继承多个接口)
public interface I3 extends I4,I5{
public void i3Method01();
}
package com.qf.test01;
public interface I4 {
public void i4Method01();
}
package com.qf.test01;
public interface I5 {
public void i5Method01();
}
二、类的多态
2.1多态的好处
遵守了OCP原则,降低了bug出现的几率
2.2需求
张三骑着自行车上班
分析:张三类、自行车类
2.2.1自行车类
package com.qf.test02;
//自行车类
public class Bike{
public void open(){
System.out.println("自行车:握好扶手,踩下脚踏板");
}
public void close(){
System.out.println("自行车:捏刹车");
}
}
2.2.2张三类
package com.qf.test02;
public class Teacher {
public void start(Bike b){
b.open();
}
public void stop(Bike b){
b.close();
}
}
2.2.3测试类
package com.qf.test02;
public class Test01 {
public static void main(String[] args) {
Teacher t = new Teacher();
Bike b = new Bike();
t.start(b);
System.out.println("欣赏沿途的风景...");
t.stop(b);
}
}
2.3需求升级
自行车 --> 小汽车-->飞机
2.3.1设计理念
OCP - 开闭原则
O - open - 在需求更改/升级时,对添加类是欢迎的
C - close -在需求更改/升级时,对修改原有类是拒绝的
P - principle
2.3.2设计思路
1.先创建一个交通工具的抽象类
2.创建工具类来实现抽象方法
2.3.3交通工具类
package com.qf.test02;
//交通工具类
public abstract class Vehicle {
public abstract void open();
public abstract void close();
}
2.3.4工具子类