JAVA面向对象梳理二
1 . 动态绑定:在向上类型转换时,一个子类对象实例,被当作父类对象实例引用给一个父类的对象变量,那么当以这个对象变量调用的方法时,如果子类有,就调用子类的这个方法,如果父类有,就调用父类的这个方法,如果都有,还是调用子类的方法。这就是动态绑定,不用我们去指定。当然,我们也可以静态绑定,我们声明父类的某一个方法为final,那么,他不可以被重写(编译器会报错),更不可能有动态绑定了。
2. 抽象方法:画画是一种方法,但是他没说要画什么,怎么画,所以,我们说他是抽象方法,抽象方法是不完全的方法,有方法名,没方法体。如果一个类有抽象方法,那么它必须声明为抽象类
3. 抽象类:同样,我们可以定义一个抽象类,如“object”“size”“shape”,是一种共同属性的抽象集合,具有抽象方法,我们不需要使用他们的抽象方法,也不能使用他们的抽象方法,他们(抽象类)只要起到接口的作用,而不是具体细节的实现。我们可以通过继承抽象类,然后重写抽象方法来具体实现。
4. 接口:完全的抽象类,接口类中全部是抽象方法,我们不是继承接口类,而是实现接口类(继承一个抽象类,和实现一个接口类,实现的作用是一样的,只不过,java中不允许多继承,我们有时候又要继承其他的类,所以这时使用实现接口)。如果某个类实现一个接口类,那么一定要重写接口类中所有的抽象方法。接口类虽然直接interface定义,但是他的权限强制为public abstrac ,其中的成员变量(类中的变量)必定是public static final(不可更改的·)
我们为什么要使用抽象类和接口
其实这个问题可以改为,我们为什么要使用面向对象的思想。窃以为,面向对象的思想其实就是“抽象和具体”思想,我们从具体的类中,找到可以概括出相同本质东西,概括他们,就是抽象他们(比如两个类,一个有“吃晚餐”方法,另一个有“吃午餐”方法,我们可以抽象出他们都有“吃”这个方法)。然后我们用接口,抽象类,来声明他们的本质,让我们(你和其他开发者),知道他们的 本质,更清晰地使用这些具体的类。