在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();
}
}