- 接口与内部类为我们提供了一种将接口与实现分离的更加结构化的方法。
- 抽象--声明,道德约束,没有很细有意外情况
- 抽象方法 abstract void fun(); 没有实现,只有声明;作用,定义规范;作为一辆车,就要能动,及时是被拖着
- 抽象类,含有1+个抽象方法以及0+个正常方法,不能被实例化,作用:要求孩子按照自己意思来的老父亲,子类必须实现父类的抽象方法,你必须当医生,不管是外科医生还是妇科医生
- 为什么有了继承还要有抽象类,防止子类啃老,忘记实现那些必须实现的方法。
- 接口--条文,法律约束,必须遵守,没有意外
- 接口中方法只能是抽象的(所以也不需要abstract关键字修饰),方法默认都是public的,因为接口就是用来实现的
- 接口中的域默认是public static final 所以要初始化(常量化是其中一个作用,不过现在有了更方便的enum)
- 接口就是法律条文,在这个国家(实现了接口),就要遵守法律(实现对应方法),不然就会报错
- Java中是单继承模式,但是可以实现多个接口,类只能继承一个类,接口可以继承多个接口,类可以实现多个类,好处实现向上转型、多态。例子:我需要一个人来干活(方法调用,参数人),任务是人来回走动(对象的方法调用),那么实现了人这个接口的男人、女人、成年人、残疾人都可以被这个方法调用,然后可能每个人走动的方式都不一样,这就是向上转型和哦动态绑定。
- 接口可以嵌套
public class Super {
class sin{};//Syntax error on token "class", char expected
interface aInterface{
interface bInterface{
class bClass{}
}
}
public Wrapping wrapping(int x) {
return new Wrapping(x){//匿名内部类构造器使用不用final
{ syso("constructor init"+x)}
public int value() {
return super.value*47
}
};
}
public Wrapping getWrapping(final int x) {
return new Wrapping(){//匿名内部类非构造器使用用final
public int value(x) {
return super.value*x;
}
};
}
}
- 内部类
- 产生原因:内部类完善了Java的多继承,可以藉由内部类继承多个类;
- 当前类只能继承一个类,多个内部类就可以多继承几个相同或不同的类,而且内部类相互独立,可以实现多个不同的功能
- 当前类实现某个接口有点不伦不类,人实现消化系统接口,不如直接包含一个内部类实现操作系统,这样返回内部类也方便
- 方便
- 可以返回一个包含自身和外部类集合的引用
- 类别
- 局部内部类Outer$Inner.class(在方法的作用域内)
- 匿名内部类Outer$1.class()
- 嵌套类:声明为static,内部类对象与外围类对象之间无关联
- 创建与使用
- Outer.Inner inner = ot.new Inner();
- 内部返回外部引用inner.this。
- 产生原因:内部类完善了Java的多继承,可以藉由内部类继承多个类;
- 闭包,可以读取其他函数内部变量的函数(数学定义),java中闭包时一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域。内部类就是面向对象的闭包,不仅包含外围类对象的信息,还自动拥有一个指向此外围类队形的引用(外围类的private也可以操作)。