关于抽象方法的实现问题

图片说明

            不是太理解啊,这个getSharePreferences 是抽象方法,按照定义,不是应该由实现Context的子类重写这个抽象方法么,为什么Context能直接调用它呢,

因为 在putBoolean 函数中的 Context 类型,传入的只会是一个 Context 的继承类,因为 抽象类是不能被实例化的,所以 此处的 调用方法,只是相当于一个提前的声明。

而之后你传入函数的的参数会是Context的子类,是没用问题的,它会自动的向下转型。和接口很类似。

你这个putBoolbean(String key, boolean value,Context ctx);传进来的这个ctx是个对象,而且这个对象是实现了Context接口,父类引用指向子类对象,
List是个接口是吧,但是可以这样写 List list = new ArrayList();而我的方法就可以直接写出putBoolbean(List list)用List作为参数类型,这就java面向对象的特征之一,多态,而多态好处多就是:提高了程序的扩展性。继承的父类或接口一般是类库中的东西,(如果要修改某个方法的具体实现方式)只有通过子类去覆写要改变的某一个方法,这样在通过将父类的应用指向子类的实例去调用覆写过的方法就行了!