《Java编程思想》笔记 第九章 接口
1.抽象类和抽象方法
- 抽象方法,仅有方法声明没有方法体
abstract class AbstractClass{ abstract void f(); //没有 {} }
- 只要有一个或者多个抽象方法,则必是抽象类,抽象类可以没有抽象方法。
- 抽象类内可以没有抽象方法,也可以只有实现的方法。
abstract class AbstractClass{ void g(){ System.out.println("hello"); } }
- 抽象类可以有自己各种权限的字段和方法,但抽象方法一定是public或者protected的,因为抽象类的抽象方法生来就是要被继承重写的。
- 继承抽象类,要覆写抽象类内的所有抽象方法,提供方法体,如果不提供方法体那么这个子类也是抽象类,前面要将加关键字
- 抽象类可以有静态代码块和非静态代码块。
2.接口
- 接口内没有任何具体实现,没有一个方法体。
public interface Runnable { public abstract void run(); }
- 接口中的方法默认public权限
- 接口中可以有成员变量,但被隐性设定为 static 和 final
- 接口中不能有代码块和静态代码块
- 接口权限和类一样也有public,但必须在同名文件中
3.协变类型:
- 子类中被覆写的方法返回类型可以是父类方法返回值的子类型
class A { } class B extends A { } abstract class AbstractClass { abstract A g(); } class C extends AbstractClass { //返回值类型是A类型 // A g(){ // return null; // } //g() 返回值类型是A类型的子类型B也可以覆写 B g() { return null; } }
4.多重继承
4.1 接口 extends 接口 , 接口,接口,. . .
4.2 类 extends 接口,接口,接口, . . .
4.3 类 extends 类 implements 接口,接口,接口, . . .
4.4 类 implements 接口,接口,接口, . . .
- 实现多个接口,这些接口中应该避免有相同的方法名
5.嵌套接口
- 接口可以嵌套在类中或者其他接口中
5.1 把嵌套的接口/类在A类外部看作A类的数据成员,在A类内部就看做正常的接口/类
5.2 类中嵌套的类或者接口权限可以是private
5.3 由于接口中的方法默认public,所以在接口中的接口不能被声明为private
5.4 嵌套中的 private接口 作用就是 让这个private接口中的方法无返回类型,不能向上转型
class A { public class Ain{ } //内部的类权限可以设定为private private class Ain2{ } public interface Aface{ } private interface Aface2{ void f(); //必须返回空值 } }
6.接口和抽象类和适配器模式
- 一个类直接实现接口就要实现接口中的所有方法,但有时并不想实现所有方法就可以使用适配器模式。
- 使用抽象类可以分离【接口实现】 和 接口, 接口实现可以有选择的实现接口中的部分方法,这就是适配器模式
- 适配器设计模式
7.接口和抽象类区别
- 语法区别如上
- 设计区别:抽象类是对一种事物的抽象,即对类抽象,而接口是对行为动作的抽象
- 这篇博客写的非常详细推荐