1.interface
- 接口定义一种规范,规定一个类必须做什么,但它不管如何具体去做;
- [修饰符] interface 接口名 extends 父接口1,父接口2....
没有构造方法,不能实例化;
接口只能继承接口,不能继承类
接口里没有普通方法,方法全是抽象的;
接口里的方法默认修饰符是public abstract;
接口里的字段全是全局常量,默认修饰符是public static final; - 接口里的成员包括(主要是前两个):
全局常量
公共的抽象方法
内部类(包括内部类,内部接口,内部枚举类);
2.使用接口
- 格式:public class SubImpl extends Super implements IA,IB
- 实现接口(支持多实现)
[修饰符] class 类名 implements 接口1,接口2...
接口的实现必须在 extends 之后;
实现接口的方法必须是 public 类型
接口不能创建实例,但是可以声明引用类型的变量。
此时,引用类型的变量必须指向到其实现类对象。
IStudent s = new String();//
IStudent s = new StudentImpl();//
3.抽象类和接口的区别
4.内部类
-
非静态内部类;静态内部类,局部内部类;
1. 非静态内部类
访问外部类的字段:外部类类名.this.字段
访问内部类字段:this.字段
访问内部类方法的局部变量:字段
2. 静态内部类
使用static修饰内部类,该内部类属于其外部类,而不属于外部类的实例;
静态内部类可包括静态成员也可包括非静态成员。根据静态成员不能访问非静态成员的规定,所以静态内部类不能访问外部类实例成员,只能访问外部类的静态成员;
3. 局部内部类
局部内部类:定义在方法里的内部类;
特点:不能在宿主类以外的地方使用,局部内部类也不能使用访问修饰符和static修饰;
局部内部类只能访问方法中final修饰的局部变量:因为final修饰的变量相当于一个常量,其生命周期超出了方法运行的生命周期
4. 匿名内部类
适合只使用一次的类
不能是抽象类,因为系统在创建匿名内部类的时候,会立即创建匿名内部类的对象。
匿名内部类不能定义构造器,因为匿名内部类没有类名。 -
匿名内部类适合于仅使用一次使用的类;匿名内部类必须继承一个父类或者实现一个接口,但最多只能一个父类或实现一个接口;