面向对象的三个特征
封装,继承,多态,这个应该是人人皆知,有时候也会加上抽象。
多态的好处
允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。主要有以下优点:
-
可替换性:多态对已存在代码具有可替换性
-
可扩充性:增加新的子类不影响已经存在的类结构
-
接口性:多态是超类通过方法签名,向子类提供一个公共接口,由子类来完善或者重写它来实现的。
-
灵活性
-
简化性
-
代码中如何实现多态
实现多态主要有以下三种方式:
1. 接口实现
2. 继承父类重写方法
3. 同一类中进行方法重载虚拟机是如何实现多态的
动态绑定技术(dynamic binding),执行期间判断所引用对象的实际类型,根据实际类型调用对应的方法。
接口的意义
接口的意义用三个词就可以概括:规范,扩展,回调。
抽象类的意义
抽象类的意义可以用三句话来概括:
-
为其他子类提供一个公共的类型
-
封装子类中重复定义的内容
-
定义抽象方法,子类虽然有不同的实现,但是定义时一致的java中==和
eqauls()
的区别,equals()
和`hashcode的区 -
==是运算符,用于比较两个变量是否相等,而equals是Object类的方法,用于比较两个对象是否相等。默认Object类的equals方法是比较两个对象的地址,此时和==的结果一样。换句话说:基本类型比较用==,比较的是他们的值。默认下,对象用==比较时,比较的是内存地址,如果需要比较对象内容,需要重写equal方法。
-
equals()
和hashcode()
的联系hashCode()
是Object类的一个方法,返回一个哈希值。如果两个对象根据equal()方法比较相等,那么调用这两个对象中任意一个对象的hashCode()方法必须产生相同的哈希值。
如果两个对象根据eqaul()方法比较不相等,那么产生的哈希值不一定相等(碰撞的情况下还是会相等的。)