抽象、接口、内部类
抽象类
使用abstract修饰类名就能得到一个抽象类,使用abstract修饰方法也能得到一个抽象方法。只有在抽象类中才能定义抽象方法,而抽象方法指的是只有方法签名的方法,长这样: public abstract void test();
抽象类就是为多态而生的。只有通过一个子类重写了父类的所有抽象方法时,抽象类才会发挥作用。也就是说,抽象类是一个给其子类提供参考的一个类,它的抽象方法可能在设计时不确定具体该怎么实现,只是知道这种类该有这些方法。然后把具体的方法功能留给子类去完成。
抽象类中可以有非抽象方法。而抽象方法只能存在于抽象类中,这为了防止实例化含有抽象方法的类。毕竟抽象方法根本没法调用。
接口
接口相当于抽象类的抽象类。在接口中,只允许定义方法签名和常量。接口的作用只是为了定义一种规范,类的规范。Java中不允许多继承,但是允许多接口实现。
这一大堆接口抽象类多态,各种名词看起来头疼,但它们最终的目的都是为了在开发程序时,让我们可以以我们自己的视角来开发、理解程序的每一部分,从而使编程更容易,更轻松。写接口也许比写接口实现还要难。
内部类
内部类就是定义在一个类中的类,内部类有很多种分类。
- 成员内部类,就是定义在一个类中的类,级别就和成员变量,成员方法一样。所以叫成员变量。成员内部类可以使用外部类的私有成员。
- 静态内部类,和成员变量一样定义在类中,但是它多了static修饰,所有它也无法使用外部类的成员。因为它加载的时机可能比外部类还早。
- 局部内部类,定义在方法中的一个类,它的生命周期和局部变量一样,因此而得名。
- 匿名内部类,匿名内部类通常与接口配合。实例化一个接口,然后重写它的方法,再把它赋值给一个变量。这样一个经过重写方法的接口,就是匿名内部类。
各种内部类的代码实现:
class test {
private int a;
public void test(){
//局部内部类
class c {
private int localA;
public void localTest();
}
...
}
//成员内部类
class b {
private int subA;
public void subTest(){
...
}
}
//静态内部类
static class c {
private int staticA;
public void staticTest(){
...
}
}
}
class another {
public satic void main(){
//匿名内部类
test t = new test() {
@Override
...
};
}
}