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

  1. Object 类里的方法有?
    答:Object 中没有定义属性,但定义了一些方法:

    • equals(Object obj): boolean
    • getClass(): Class<?>
    • hashCode(): int
    • notify(): void
    • notifyAll(): void
    • toString(): String
    • wait(): void
    • wait(long timeout): void
    • wait(long timeout, int nanos): void
  2. toString() 方法的内部实现原理?
    答:

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

    }

  3. toString() 方法的内部实现为什么要这么写?
    答:写类名是可以理解的,表示对象的类型,而写哈希值则是不得已的,因为 Object 类并不知道具体对象的属性,不知道怎么用文本描述,但又需要区分不同对象,只能是写一个哈希值。

  4. 怎么理解 extends 关键字?
    答:

    • Java 使用 extends 关键字表示继承关系,一个类最多只能有一个父类。
    • 子类不能直接访问父类的私有属性和方法。
    • 除了私有的外,子类继承了父类的其他属性和方法。
  5. 怎么理解 super 这个关键字?
    答:

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

    • this 引用一个对象,是实实在在存在的,可以作为方法参数,可以作为返回值。
    • super 只是一个关键字,不能作为参数和返回值,它只是用于告诉编译器访问父类的相关变量和方法。
  7. 怎样理解多态、向上转型、动态绑定这几个概念?
    答:

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

    • 创建对象的代码和操作对象的代码经常不在一起,操作对象的代码往往只知道对象是某种父类型,也往往只需要知道它是某种父类型就可以了。
    • 多态和动态绑定是计算机程序的一种重要思维方式,使得操作对象的程序不需要关注对象的实际类型,从而可以统一处理不同对象,但又能实现每个对象的特有行为。说白了就是操作统一行为就调用父类,操作特定行为就调用子类。
  9. new 过程的执行顺序是怎样的?
    答:new 过程中,父类先进行初始化,可通过 super 调用父类相应的构造方法,没有使用 super 的情况下,调用父类的默认构造方法。