Day_12 接口与抽象类
一.接口
1.定义:由于Java中不允许多重继承,因此要实现多个类的功能,则可以通过实现多个接口来实现。Java接口和Java抽象各类代表的就是抽象类型,就是我们需要提出的抽象层的具体体现。如果要提高程序的复用率,增加程序的可维护性,可拓展新,就必须是面向接口的编程。
2.格式:interface 接口名{代码…}
3.特点:
<1>接口中都是抽象方法。
<2>通过interface关键字创建接口。
<3>通过implements让子类来实现。
<4>接口是一个特殊的抽象类。
<5>接口突破了Java的单继承的局限性。
<6>接口和类之间可以多实现,接口和接口之间可以多继承。
<7>接口是对外暴露的规则,是一套开发规范。
<8>接口提高了程序的功能拓展,降低了耦合性。
4.用法
<1>接口中是没有构造方法的。
<2>接口中没有成员变量,都是常量,因此,当定义变量没有写修饰符时,会默认加上。
<3>接口中的方法默认是抽象的,如果不写明abstract,那么也会自动补齐。
<4>Java中单继承的局限性通过接口可解决,接口可多继承也可多实现,甚至可继承的同时多实现。
二.入门案例
public class Interface {
public static void main(String[] args) {
Zi z = new Zi();
z.study();
z.teach();
}
}
interface Fu{
public abstract void study();
public abstract void teach();
}
class Zi implements Fu{
public void study() {
System.out.println("儿子学习");
}
public void teach() {
System.out.println("儿子教书");
}
}
三.接口与成员变量
public class Interface_Variable {
public static void main(String[] args) {
Zi7 z = new Zi7();
System.out.println(z.number1);
System.out.println(z.number);
System.out.println(Fu7.number);
}
}
interface Fu7{
public final static int number = 10;
}
class Zi7 implements Fu7{
int number1 = 30;
}
四.接口与成员方法
public class Interface_Methods {
public static void main(String[] args) {
Inter2 in = new InterImpl();
System.out.println(in.count);
System.out.println(Inter2.count);
in.get();
in.update();
}
}
interface Inter2{
int count = 20;
void update();
void get();
}
class InterImpl implements Inter2{
public void update() {
System.out.println("更新");
}
public void get() {
System.out.println("获得");
}
}
五.接口的多继承与多实现
public class Interface_Complexity {
public static void main(String[] args) {
Interface1 in = new Interface1Impl();
in.save();
in.update();
}
}
interface Interface1{
void save();
void update();
}
interface Interface2{
void get();
void delete();
}
interface Interface3 extends Interface1,Interface2{
void add();
}
class Interface1Impl implements Interface3{
public void save() {
System.out.println("吃饭吧");
}
public void update() {
System.out.println("更新吧");
}
public void get() {
}
public void delete() {
}
public void add() {
}
}
六.总结
1.类和类之间的关系:继承(extends)-单继承。
2.类和接口的关系:实现(implements)-单-多。
3.接口和接口的关系:继承(extends)-单-多,接口的多继承关系,打破了java单继承的局限性。
4.接口和抽象类的区别:
<1>抽象类用abstract,接口用interface。
<2>子类和抽象类之间是extends关系,而实现类和接口之间是implements关系。
<3>抽象类中可以有构造方法,接口里不能出现构造方法。
<4>抽象类中可以有变量,接口里没有变量,全部都是静态的常量。
<5>接口里定义常量的语法,String name = “Jack”;会自动为其补上public static final。
<6>抽象类中可以有普通方法和抽象方法,而接口中全部都是抽象方法。
<7>多继承:interface A extends B,C。其中A是子接口,同时拥有自己和B,C的功能。
<8>多实现:class AImpl implements M,N,O,P,其中AImpl是实现类,需要同时重写所有抽象方法,否则就是一个抽象类。
<9>继承的同时多实现:Class AImpl extends Object Implements M,N,一定是先继承,后实现。