抽象类
当多个类中出现相同功能,但是功能主体不同,这时可以进行向上抽取,这时只抽取功能定义,而不抽取功能主体
抽象:看不懂
抽象类的特点:
1.抽象方法一定定义在抽象类中
2.抽象方法和抽象类都必须被abstract关键字修饰
3.抽象类不可以用new创建对象,因为调用抽象方法没意义
4.抽象类中的抽象方法要被使用必须由子类复写其所有的抽象方法后建立子类对象调用,如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类
抽象类和一般类没有太大的不同,该怎么描述事物就怎么描述事物,只不过该事物中出现了一些看不懂的东西,这些不确定的部分,也是该事物的功能,需要明确出来,但是无法定义主体。通过抽象方法来表示
抽象类比一般类多了抽象方法,就是在类中可以定义抽象方法
抽象类不可以实例化
特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象
接口
接口:初期理解,可以认为是一个特殊的抽象类。当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示
接口是对外暴露的规则,接口是程序的功能扩展,接口可以用来多实现
class用于定义类,interface用于定义接口
接口定义时,格式特点:
1.接口中常见定义:常量,抽象方法
2.接口中的成员都有固定修饰符。
a)常量:public static final
b)方法:public abstract
记住:接口中的成员都是public的
接口是不可以创建对象的,因为有抽象方法,需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化
接口可以被类多实现,也是对多继承不支持的转换形式,java支持多实现
接口是继承体系以外的一个功能扩展
类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口
接口与接口之间可以有多继承
类与类之间只可以单继承
1.一个类可以实现多个接口,但只能继承一个超类
2.接口中只有静态成员常量(public static final)和抽象方法(pubilc abstract)。实现接口就一定要实现接口中的所有方法。体现了一种“如果你是xx,那么你就一定得会…..”的原则;
对于接口中只能定义静态常量的理解:因为接口就是一组规范,他所定义的属性是不希望被外界改变的,如果不定义成常量,那么外界就可以随意修改他的值,那么也就无从知晓他初衷想要表达什么了。定义成静态之后,这个常量就在内存中有一个唯一的位置,实现了该接口的类可以直接通过类名调用,而不用每个类的对象都要去内存再开辟一块空间来存储这个常量了,节约了空间和时间。
抽象类和接口相比,可以有普通成员变量,可以有非抽象方法,还可以有静态方法。可以选择一部分需要的方法来重写,不用重写所有的方法
3、使用接口还是使用抽象类要看使用动机是什么:抽象类的目的是减少代码的重复,而接口是为了实现对象的多态性
例如:有两个人,这两个人除了兴趣爱好以外,其他的行为活动都是一样的,那么只需要写一个AbstractPerson抽象类,里面包含两个人相同的行为的方法,然后只需要再各自实现自己兴趣爱好的方法就可以了,减少了代码的重复;如果有一个人和一条鱼,把他们都看成是动物,他们都具有吃饭和呼吸等行为,但是人和鱼的吃饭和呼吸的方法是不同的,这时候就有必要写一个IAnimal接口,人和鱼都去实现这个接口,然后再各自实现里面的吃饭和呼吸等方法,体现了对象的多态性。