OOP
Posted programmerzx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OOP相关的知识,希望对你有一定的参考价值。
Java有哪些特性
抽象
抽象是把多个事物的共性的内容抽取出来,本质就是把我们关注的内容抽取出来。(比如:宝马、奔驰都属于汽车,汽车是我们抽象出的概念)
- 抽象方法特点
只有方法的头没有方法体
抽象方法用abstract来修饰
抽象方法代表一种不确定的操作或行为
抽象方法不能被调用
- 抽象类的特点
定义中含有抽象方法的类叫抽象类
抽象类用abstract来修饰
抽象类代表一种抽象的对象类型
抽象类不能实例化
抽象类中可以由具体方法,可以没有抽象方法
继承
对象的一个新类可以从现有类派生。新类继承了原始类的特性,可以修改或者增加新的方法使之更适合特殊的需要。
封装
把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。
多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个方法,使用不同的对象而执行不同操作。
Object
1. public final native Class<?> getClass()
navtive方法,用于返回当前运行时对象的Class对下你给,使用了 final 关键字修饰,所以不允许子类重写
2. public native int hashCode()
native方法,用于返回对象的哈希吗,主要使用在哈希表中,比如jdk中的 HashMap
3. public boolean equals(Object obj)
用于比较两个对象的内训地址是否相等,String 类对该方法进行了重写用于比较字符串的值是否相等
有以下5个规则
自反性。对于任何非 null 的引用值 x,x.equals(x) 应该返回 true
对称性。对于任何非 null 引用值 x 和 y ,当且仅当: y.equals(x) 返回 true时,x.equals(y)才返回 true
传递性。对于任何非 null 引用值 x y 和 z,如果 y.equals(x)返回 true,y.equals(z)返回 true,那么 x.equals(z)也应该返回true
一致性。对于任何非 null 引用值 x 和 y,假设对象上 equals 比较中的信息没有被修改,则多次调用 x.equals(y) 始终返回 true 或者 始终返回false
对于任何非 null 引用值x,x.equals(null) 用返回 false
4. protected native Object clone() throws CloneNotSupportedException
native 方法,用于创建并返回当前对象的一份拷贝。
x.clone() != x //true
x.clone().getClass() == x.getClass() //true
Object 本身是没有实现Cloneable接口的,所以不重写 0.clone方法并且进行调用的话会发生CloneNotSupportedException异常。
5. public String toString()
返回对象的字符串表示形式。实际上是该符号字符的 ‘类名称的字符串@’ 和 对象的哈希吗的无符号16进制的表示。换句话说就是返回了下列值的字符串:
getClass().getName() + “@” + Integer.toHesString(hashCode)
建议 Object 所有子类都重写这个方法
6. public final native void notify()
native方法,并且不能重写。
唤醒一个在此对象监视器上等待的线程(监视器相当于就是锁的概念)
如果有多个线程在等待只会唤醒一个。
7. public final native void notifyAll()
native方法,并且不能重写。
作用跟 notify() 一样,只不过会唤醒在此对象监视器上等待的所有线程,而不是一个线程。
8. public final native void wait(long timeout) throws InterruptedException
native 方法,并且不能重写。
作用是:暂停线程的执行。
注意:sleep() 方法没有释放锁,wait释放了锁。timeout 是等待时间。
9. public final void wait(long timeout, int nanos) throws InterruptedException
比上者多了 nanos参数,表示额外的时间(以毫秒为单位,范围是 0 - 999999)。
10. public final void wait() throws InterruptedException
跟上面两个一样,只不过该方法会一直等下去,没有超时这个概念
11. protected void finalize() throws Throwable()
实例被垃圾回收器回收的时候出发的操作
泛型(“参数化类型”)
使用泛型的好处
??1.可以统一数据类型,便于操作。
??2.将运行时的异常提前到了编译时,提高了效率。(ClassCastException)
??3.避免了强制类型转换
??4.实现代码的模板化,把数据类型当作参数传递,提高了可重用性。
以上是关于OOP的主要内容,如果未能解决你的问题,请参考以下文章