07 java的object类和内部类, 匿名类和匿名对象

在java里Object类是在所有类里的最底层的基类,如果一个类没继承另一个类,那编译器就会安排它继承Object类.

class Animal {
  // ...
}

等价于:
class Animal extends Object {
    // ...
}

在java里所有的类都是Object的派生类, 所以每一个类都具有Object的函数成员功能。其中Object类里有一个toString()函数,用于在被打印输出时触发调用.

 class Animal {  
    public String toString() {  
        return "no animal";
    }
}

public class Hello {

    public static void main(String[] args) {
        Animal a = new Animal();
        System.out.println(a); //会输出a.toString()函数返回的内容
    }

}

匿名类:
java类的函数成员可以在创建对象时,重写函数体. 这种作法是只针对一个对象来修改, 不是针对所类对象.
如: Human类里有一个walk函数成员, 在创建对象时重写函数体.


 Human h = new Human() {
    public void walk() {
        ...;
    }
 };

final 关键字可用于声明只读的变量与只读的类(终态类);

final声明类表示此类的最终的状态只能是写好的样子, 不能再被继承扩展. 创建对象时也不可以修改函数成员.

    final class Hello {
        public int num = 789;
    }
    // 则类Hello不能被继承,也不能在创建对象时重写函数成员

注意一个类可以声明为final或者abstract, 但是不能声明为final abstract.


内部类就是在一个类里定义另一个类,如在类Student里定义Lesson内部类:


class Student {
    class Lesson { //内部类, 内部类不可以声明静态函数成员(方法)
        public void lessonName() {
            System.out.println("lesson name");
        }
    }
}

当使用内部类创建对象需要通过顶级的类对象来创建, 如:

public class Main {
    final class Hello { //内部类
        public int num = 789;
    }   

    public static void main(String[] args) {
        Main m = new Main(); //创建顶层类对象
        Main.Hello h = m.new Hello(); //通过顶层类对象来创建内部类对象
        System.out.println(h.num);

        //////////////////
    //匿名对象就是指没有名字的对象。 如"new Student()"就是创建出一个没有名字的对象来直接调用.
        Student.Lesson l = new Student().new Lesson();

        l.lessonName();
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值