.Net转Java自学之路—基础巩固篇九(Object、内部类)

Object:

  所有类的父类,即跟类。Java中的类直接或间接的继承自Object

  该类中封装了所有对象都具备的方法:

    boolean equals(Object obj)  对象比较;默认比较内容地址。所以很多对象都会对该方法复写。

    String toString()  字符串转换。

    int hashCode()  对象哈希值。

    void finalize()  垃圾回收调用的垃圾回收方法。

内部类:

  也称:内置类、嵌套类。将类定义在另一个类中。内部类可以直接访问外部类的成员。外部类访问内部类,需建立内部类的对象。

  什么时候定义内部类?

    当分析一个事物时,该事物内部还有具体的事物,这个具体的事物在使用该事物的其他成员。这时就将这个具体的事物用内部类来描述。

  而且内部类通常都不会直接对外提供,都会封装到外部类中,外部类一般会通过对外提供方法的形式对其访问。

  对内部类的访问:

    外部类.内部类 对象=new 外部类().内部类()

  通常情况下内部类不被其它类访问。一般定义为private私有化。

  当内部类中如果有静态成员时,该内部类必须是静态的;而静态内部类只能访问外部类的静态成员。

  在执行静态内部类方法时的俩种情况:

    1、内部类静态,方法非静态:该方法需要对象调用执行。

    2、内部类静态,方法静态:类名.方法名

  非静态内部类之所以可以访问外部类的成员,那是因为内部类汇总都只有一个外部类对象引用;外部类.this.成员

  若内部类定义在局部位置上,那么只能访问该局部中被final修饰的常量。

匿名内部类:

  没有名字的内部类。优点:简化了内部类的书写。

  简化的前提:内部类必须继承或实现实现一个外部类或外部接口。

  格式:

    new 类/接口名{方法体}

  匿名内部类其实就是一个子类匿名对象。这是一个带有内部的对象。

  特殊实例:

new Object    /*第一种情况*/
{
  void method()
  {
      /*Code;*/
  }    
}.method();

Object obj=new Object    /*第二种情况*/
{
  void method()
  {
      /*Code;*/
  }    
};
obj.method();

  第一种情况正常运行。

  第二种情况不能正常运行。

  原因:等号右边是一个Object类的子类对象,用匿名对象来表示的。当把这个对象赋值给Object类型的obj时,该类的对象就相当于转换成为Object。而obj中时没有定义method方法的。这就是在多态时,一般非静态函数调用时,编译看左边,运行看右边的原理。

猜你喜欢

转载自www.cnblogs.com/drop/p/9231895.html