27.写出java.lang.Object类的六个常用方法
- public boolean equals(java.lang.Object) 比较对象的地址值是否相等,如果子类重写,则比较对象的内容是否相等。
- public native int hashCode()获取哈希码
- public java.lang.String toString() 把数据转变成字符串
- public final native java.lang.Class getClass() 获取类结构信息
- protected void finalize() throws java.lang.Throwable垃圾回收前执行的方法
- protected native Object clone() throws java.lang.CloneNotSupportedException 克隆
- public final void wait() throws java.lang.InterruptedException多线程中等待功能
- public final native void notify() 多线程中唤醒功能
- public final native void notifyAll() 多线程中唤醒所有等待线程的功能
28.权限修饰符的区别
|
同一个类 |
同一个包中 |
子类 |
所有类 |
| private |
* |
|
|
|
| default |
* |
* |
|
|
| protected |
* |
* |
* |
|
| public |
* |
* |
* |
* |
- 类的访问权限只有两种:
- public公共的 可被同一项目中所有的类访问。 (必须与文件名同名)
- default 默认的 可被同一个包中的类访问
- 成员(成员变量或成员方法)访问权限共有四种:
- public 公共的 可以被项目中所有的类访问。(项目可见性)
- protected 受保护的 可以被这个类本身访问;同一个包中的所有其他的类访问;被它的子类(同一个包以及不同包中的子类)访问。(子类可见性)
- default 默认的被这个类本身访问;被同一个包中的类访问。(包可见性)
- private 私有的 只能被这个类本身访问。(类可见性)
29.继承条件下构造方法的执行过程
- 继承条件下构造方法的调用规则如下:
- 情况1:如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,写不写“super();”语句,效果是一样的。
- 情况2:如果子类的构造方法中通过super显式调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法。
- 情况3:如果子类的构造方法中通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则。
- 特别注意的是,如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止。
30. ==和equals的区别和联系
- “==”是关系运算符,equals()是方法,同时他们的结果都返回布尔值;
- “==”使用情况如下:
- 基本类型,比较的是值
- 引用类型,比较的是地址
- 不能比较没有父子关系的两个对象
- equals()方法使用如下:
- 系统类一般已经覆盖了equals(),比较的是内容。
- 用户自定义类如果没有覆盖equals(),将调用父类的equals(比如是Object),而Object的equals的比较是地址(return (this == obj);)
- 用户自定义类需要覆盖父类的equals()
- Object的==和equals比较的都是地址,作用相同
posted @
2020-10-20 08:54
xiaokai9527
阅读(
36)
评论()
收藏
举报