在Java中所有类都是从Object这个类继承出来的,它是所有类的源头,它是所有类的父类,如果Java中没有共同的父类,那将无法写出像ArrayList这样的可以处理各种种类的类。
例子:public class Dog extend Obeject{}
1.提问:Object是一个抽象类吗?
回答:不是一个抽象类,因为它可以被实例化,而抽象类不能被实例化,而且没有被abstract修饰。
2.提问:Object的方法可以覆盖吗?
回答:部分可以被覆盖,但是有些被标记为final,代表你不能覆盖掉它们。
3.提问:ArrayList方法是通用的,那ArrayList<Dog>是什么意思呢?
回答:只能保存Dog的对象。
4.提问:Object的主要目的是提供多态的参数和返回类型吗?
回答:Object主要有两个目的:作为多态让方法可以应付多种类型的机制,以及提供java在执行器对任何对象都有需要的方法。
5.任何从ArrayList<Object>取出来的东西都会被当做Object类型的引用而不管它原来是什么。
6.当一个对象被声明为Object类型的对象所引用时,它无法再赋值给原来类型的变量。例如:
Object o = new Object;
o.bark(); //bark原来属于狗的方法
所以这样编译器是过不了的,因为无法再赋值给原来的类型了,但是可以使用强制转换类型把它转回去。
7.编译器是根据引用类型来判断有哪些method(方法)可以调用,而不是对象的类型。
8.在Java中的每个对象除了真正的类型外,也可以当做是Object来处理 //还可以继承Object类型的方法
一.“多态” 意味着 “很多种形式”
1.当你把对象装进ArrayList<Object>时,不管它原来装的是什么,你只能把它当做是Object类.
2.从ArrayList<Object>取出引用时,引用的类型只会是Object类,这代表你只会取得Object的遥控器(也就是引用变量)。
3.Java很注重引用变量的类型,你只能在引用变量的类确实有该方法才能调用它,把类的公有方法当作是合约的内容,合约是你对其他的程序的承诺协议。