在java中的所有类都是从Object这个类继承出来的
实际上所有的类都是从对象给继承出来的。你可以把自己的类想象成
public class Dog extends Object{
}
如果dog类本就是继承Canine,编译器会知道改成让Canine去继承Object
为什么需要Object这个类呢?
如果java中没有共同的父类,那就无法写出像ArrayList这种可以处理各种类的类。
Object类有两个主要的目的:
1.作为多要让方法可以应付多种类型的机制。
2.提供java在执行期间对任何对象都需要的方法的实现程序代码(让所有的类都会继承到)
既然多态类型这么有用,如果把所有参数类型和返回类型都设定成Object类型的话:
Object o = new Object();
o.bark();//这样的话编译器会报错。
当把对象装入ArratyList<Dog> dogList = new ArrayList<>();
Dog dog1 = new Dog();
dogList.add(dog1);
Dog d = dogList.get(0);//将Dog赋值给新的Dog引用变量;
但是如果把它声明成Object的话。
ArratyList<Object> dogList = new ArrayList<>();
Dog dog1 = new Dog();
dogList.add(dog1);
Dog d = dogList.get(0);//无法通过编译,对ArrayList<Object>调用get()方法会返回一个Object类型。
任何从ArrayList<Object>取出的东西都会被当作Object类型的引用而不管他原来是什么。
假设Snowboard类中有trun();getAir();shred();loseControl();方法
Snowboard s = new Snowboard();
Object o = s;
o只能控制到object的方法;
实际上所有的类都是从对象给继承出来的。你可以把自己的类想象成
public class Dog extends Object{
}
如果dog类本就是继承Canine,编译器会知道改成让Canine去继承Object
为什么需要Object这个类呢?
如果java中没有共同的父类,那就无法写出像ArrayList这种可以处理各种类的类。
Object类有两个主要的目的:
1.作为多要让方法可以应付多种类型的机制。
2.提供java在执行期间对任何对象都需要的方法的实现程序代码(让所有的类都会继承到)
既然多态类型这么有用,如果把所有参数类型和返回类型都设定成Object类型的话:
Object o = new Object();
o.bark();//这样的话编译器会报错。
当把对象装入ArratyList<Dog> dogList = new ArrayList<>();
Dog dog1 = new Dog();
dogList.add(dog1);
Dog d = dogList.get(0);//将Dog赋值给新的Dog引用变量;
但是如果把它声明成Object的话。
ArratyList<Object> dogList = new ArrayList<>();
Dog dog1 = new Dog();
dogList.add(dog1);
Dog d = dogList.get(0);//无法通过编译,对ArrayList<Object>调用get()方法会返回一个Object类型。
任何从ArrayList<Object>取出的东西都会被当作Object类型的引用而不管他原来是什么。
假设Snowboard类中有trun();getAir();shred();loseControl();方法
Snowboard s = new Snowboard();
Object o = s;
o只能控制到object的方法;
s则能控制到所有的方法;
public class DogTest {
public static void main(String[] args) {
Dog dog = new Dog();
Animal animal = dog;
dog.bark();
animal.bark();//无法通过编译
}
}