Java 类的继承(一):基本概念

1. Object 类里的方法有?

答:Object 中没有定义属性,但定义了一些方法(源码基于 JDK 7.0):

  • public 方法

    public native int hashCode(); // 用于获取对象的哈希值
    public final native Class<?> getClass(); // 返回此 Object 的运行类
    public boolean equals(Object obj) { return (this == obj); } // 用于确认两个对象是否“相同”
    public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } // 返回该对象的字符串表示
    public final native void notify(); // 唤醒在此对象监视器上等待的单个线程
    public final native void notifyAll(); // 唤醒在此对象监视器上等待的所有线程
    public final void wait() throws InterruptedException { wait(0); } // 用于让当前线程失去操作权限,当前线程进入等待序列
    public final native void wait(long timeout) throws InterruptedException; // 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,让当前线程等待
    public final void wait(long timeout, int nanos) throws InterruptedException {} // 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,让当前线程等待
    
  • private 方法

    private static native void registerNatives() // 私有方法
    
  • protected 方法

    protected native Object clone() throws CloneNotSupportedException; // 创建并返回此对象的一个副本
    protected void finalize() throws Throwable // 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法
    

2. toString() 方法的内部实现原理?

答:

public String toString() {
    return getClass.getName() + "@" + Integer.toHexString(hasCode()));
}

3. toString() 方法的内部实现为什么要这么写?

答:写类名是可以理解的,表示对象的类型,而写哈希值则是不得已的,因为 Object 类并不知道具体对象的属性,不知道怎么用文本描述,但又需要区分不同对象,只能是写一个哈希值。

4. 怎么理解 extends 关键字?

答:

  • Java 使用 extends 关键字表示继承关系,一个类最多只能有一个父类。
  • 子类不能直接访问父类的私有属性和方法。
  • 除了私有的外,子类继承了父类的其他属性和方法。

5. 怎么理解 super 这个关键字?

答:

  • super 这个关键字用于指代父类,可用于调用父类构造方法、访问父类方法和变量。
  • 调用父类构造方法时,super 必须放在第一行。
  • super 同样可以引用父类非私有的变量。

6. superthis 的区别?

答:

  • this 引用一个对象,是实实在在存在的,可以作为方法参数,可以作为返回值。
  • super 只是一个关键字,不能作为参数和返回值,它只是用于告诉编译器访问父类的相关变量和方法。

7. 怎样理解多态、向上转型、动态绑定这几个概念?

答:

  • 多态:子类对象可以赋值给父类引用变量。
  • 向上转型:转型就是转换类型,向上转型就是转换为父类类型,本质和多态是一样的。
  • 动态绑定:多态之后,实际执行调用的是子类实现。

8. 为什么要有多态和动态绑定?

答:

  • 创建对象的代码和操作对象的代码经常不在一起,操作对象的代码往往只知道对象是某种父类型,也往往只需要知道它是某种父类型就可以了。
  • 多态和动态绑定是计算机程序的一种重要思维方式,使得操作对象的程序不需要关注对象的实际类型,从而可以统一处理不同对象,但又能实现每个对象的特有行为。说白了就是操作统一行为就调用父类,操作特定行为就调用子类。

9. new 过程的执行顺序是怎样的?

答:new 过程中,父类先进行初始化,可通过 super 调用父类相应的构造方法,没有使用 super 的情况下,调用父类的默认构造方法。

-------------本文结束感谢您的阅读-------------