抽象类
类和接口的中庸之道
包含一个或多个抽象方法的类为抽象类
- 继承抽象类
- 子类实现抽象方法
- 子类没实现抽象方法就必须限定子类为抽象类
注:
- 抽象类不可用private修饰,因为这样就不可以实现抽象方法
- 不能创建对象??
接口
- 方法确定方法名、参数列表、返回类型,默认为public
- 字段隐含定义为public static final,必须被初始化
- 实现类的方法和字段必须为public,不可降低可见性
内部类
-
内部类作用
实现多重继承:外部类只能继承一个类,而内部类可以继承其他的类,这样解决了单继承的问题
-
实例内部类
- 引用类型:OuterClassName.InnerClassName
- 可以访问任何外部类成员(即使是private)
- 不能拥有静态成员(静态成员只能在顶级类或者静态内部类中声明)
- 内部类生成对外部类的引用: OuterClassName.this,静态内部类不可以这样,因为访问实例内部类必须先有外部类的实例,而.this就是外部类的实例,当访问静态内部类时直接使用类名调用没有外部类实例,所以不能用.this
- 创建内部类实例:外部类对象.new 内部类名();
- 静态内部类
- 内部类实例不与外部类实例有任何关联
- 可以访问外部类静态成员
- 拥有静态和实例成员
-
局部内部类
方法内部的类,不希望此类是公共可用的
-
匿名内部类
接口 a() { return 接口() { //具体实现 }; }
return返回的是接口的实现类的对象,但是没有具体的名字,其引用通过向上转型为接口的引用