面对对象编程(OOP),即是把问题中的各个事物抽象为对象的概念,然后给这些对象赋予属性和方法,以合理的方式让每个对象使用自己的方法来解决问题。下面会来介绍一些OOP中常用的操作。
一。接口
接口是抽象方法的集合,一个类通过继承接口的方式,从而来继承接口的抽象方法。接口和类属于不同的概念,类描述对象的属性和方法,而接口则包含类要实现的方法。
接口无法实例化,但可以被实现,一个实现接口的类,必须实现接口中描述的所有方法,否则就必须声明为抽象类。
二.方法重载
重载(Overload),是指可以用相同的名字编写多个方法,并使其具有不同的参数列表或返回值。用于编写功能类似但参数有差异的方法十分便捷。
三.继承与覆写
继承是OOP中非常实用的机制,它是两个不同类间的一种关系,A类继承B类,就意味着A类中含有B类的所有功能。其中我们将被继承的B类称为超类(super class),父类(parent class),基类(base class),把继承后生成的A类称为子类(subclass),扩展类(extended class)。
继承后的A类已经有了B类中的所有成员变量和成员方法,但若是不满足于此,就可以在其中继续编写新的方法。
继承关系中有几点值得注意:
1.父类中private的变量和方法是无法被继承的,只有将其改为public或protected才能继承,出于安全性一般建议用protected。
2.子类调用父类中继承来的内容,可以用Super关键字引用
3.对父类的方法不满意,可以用覆写的方式更改;但父类中的成员变量不可再更改,即子类中不可定义与父类重名的成员变量。
覆写(override),是指在子类中定义与父类方法签名完全相同的方法,对其进行新的功能编写并覆盖。
四。多态
多态就是指同一个行为具有多个不同表现形式或形态的能力,意即同一个接口使用不同实例而执行不同的操作。
多态的存在有三个必要条件:继承、重写以及父类对子类对象的引用指向。
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有则会出现编译错误;如果有,再去调用子类中重写过的同名方法。
多态的优势在于使程序具有良好的拓展性和可维护性,并可以对所有类的对象进行通用处理。
基于多态的特点,在调用方法时要注意:编译在左,运行在右。
在调用变量时要注意:编译在左,运行也在左。
多态同样也有缺点,即不能使用子类的独有功能。
五.等价性
等价关系,是要满足自反、对称与传递的关系。
在设计类时,经常需要 重写equals方法以及相应的hashcode方法。
在重写过程中,就必须遵从等价性约定,满足同一对象多次调用都能返回相同结果,并对空对象返回false.
对于不可变对象,观察和行为相等是相同的,所以必须重写equals()和hashCode()方法。
而对可变类型来说,往往倾向于实现严格的观察等价性。Java对其大部分可变数据类型(如Collections)使用观察等价性,如两个List中包含相同顺序的元素,则equals()返回true。部分可变类型用行为等价性。但在有些时候,观察等价性可能导致bug,甚至可能破坏RI。因此实现行为等价性比较好,也就不必重写equals()和hashCode()方法。
上述即为我对面向对象编程、继承和多态,等价性等概念的一点理解,希望能在巩固自身掌握的同时为其他阅读者带来一点收获。💪