一.接口
1.什么是接口
接口是一种特殊的抽象类. 一个类可以继承多个接口.
*** 2.接口和抽象类的区别
抽象类用abstract class定义, 接口用interface定义.
抽象类中可以有不抽象的方法, 接口中的方法全是抽象的.
抽象类使用extends继承, 接口使用implements实现.
抽象类中的方法没有默认修饰符, 接口中的方法默认是被public abstract修饰的.
抽象类中的属性没有默认修饰符, 接口中的属性默认是被public static final修饰的.
抽象类要占用继承的位置, 接口不用占用继承位置.
3.接口相对于抽象类的优点
接口可以被多继承, 一个类同时可以实现多个接口, 这个类的对象就可以被当作多种类型来使用.
这么做更好的支持了多态.
4.什么时候用接口, 什么时候用抽象类
能用接口的时候就不用抽象类, 因为接口不占用继承的位置
如果需要在类中定义不抽象的方法, 那么就只能使用抽象类了
二.内部类
* 1.类中的内部类
在一个类中可以定义一个新的类, 这个新的类就是外部类的一个成员.
内部类的类名是: 外部类名.内部类名
创建内部类对象时, 必须先创建外部类对象. 例如: Outer.Inner inner = new Outer().new Inner();
内部类的用途:
如果定义一个类的时候, 希望先创建另一个类对象再创建这个类对象, 那么就可以把类定义为内部类
内部类是外部类的一个成员, 可以私有化, 只在当前外部类中使用
内部类中可以访问外部类的成员(私有的也可以). 访问方式: 外部类名.this.成员名
注意:
内部类可以访问外部类成员, 因为内部类对象存在时, 一定会对应一个外部类对象
外部类不能访问内部类成员, 因为外部类对象创建时, 不一定有内部类对象, 即使有, 一个外部类对象也可以对应多个内部类对象
内部类中不能定义静态成员, 因为静态的本意就是不创建对象即可使用, 而内部类则需要创建外部类对象才能使用, 它们互相矛盾
2.静态内部类
类中的内部类可以使用static修饰
不用创建外部类对象, 可以直接创建内部类对象. 例如: Outer.Inner inner = new Outer.Inner();
由于类可以直接使用, 所以也可以定义静态成员
静态内部类中不能使用外部非静态的成员, 因为内部类创建的时候可能没有创建外部类对象
3.方法中的内部类
类也可以在方法中定义, 这种类只能在当前方法中使用
方法中的内部类也可以访问外部类中的成员, 使用方式和类中内部类相同
方法中内部类的class文件名中会带有一个编号. 不同的方法中可以有同名的内部类, 用编号区分
方法中的内部类访问方法中局部变量时, 变量必须是final的
注意: 创建对象的代码必须在声明类的代码下面
* 4.匿名内部类
如果一个类只使用一次, 那么就可以定义为匿名内部类
定义方式: new 父类名() { 类定义 }
定义了匿名内部类之后, 会自动使用这个类创建一个对象
匿名内部类的clsas文件名是: 外部类名$编号.class
匿名内部类是方法中内部类的一种, 访问方法中局部变量, 也需要加上final