OOP:
面向对象编程思想,Java是一门面向对象的编程语言,变量、方法都是属于对象的,需要通过对象来调用。
OOP有三大特性:封装、继承、多态
封装
私有化成员变量的细节,只对外提供获取的方法,如用private修饰成员变量,用public修饰getter方法。
继承
子类继承父类,获得父类的非私有成员变量和方法。
子类继承抽象类或接口,需要实现抽象方法,或重写方法。
接口和抽象类的区别:
接口更倾向于用于制定标准,体现在接口中的变量只能由public final static修饰,首先为什么是public static,因为接口可以多继承,为了区分多个接口出现的同名变量(InterfaceA.a或InterfaceB.a),所以是public static;为什么是final呢,因为接口用于制定标准,灵活性放在子类中来实现。
抽象类则是一类事物的集合,抽象出他们共有的变量和方法。抽象类只能单继承,可以没有抽象方法。
抽象类可以被实例化(接口不行):
抽象类有构造方法,而接口没有,有构造方法才可以被实例化。实例化抽象类不是直接new,直接new编译不通过,而是由Java的类加载机制来实例化,即加载子类时,在调用子类的构造方法之前,会调用super()构造方法来实例化父类。
JDK8接口中方法用default修饰则表示该方法有默认实现,无需子类实现(子类可以不实现由default修饰的接口方法)。
多态
父类对象的引用指向子类对象实例,引用(四大引用下节再将)在栈中,对象在堆区。如B继承A,A是父类(接口),B是子类:
A a = new B();
显然,调用父类引用的方法时,若父类中没有该方法则报错;父类中有,则会先去调用子类中的重写方法,若子类未重写则调用父类的方法。
那么使用多态的必要条件就是继承+重写父类的方法+父类引用指向子类对象。
多态的好处:
灵活性和可拓展性:如B中的方法功能不够用了,我现在新建了类C来继承A并重写A中的方法,那么代码就只需要变动很小的一部分,即A a = new C();
其他代码无需变动。