抽象类
-
有些类不该被初始化(例如Animal,因为现实中没有Animal对象存在),为了防止Animal类被初始化,可以将其标记为抽象类——在类的声明前面加上抽象类关键词abstract
- 具体类——非抽象的类就是具体类
- 抽象的方法——除了类之外,也可以将方法标记成抽象的,抽象方法必须被覆盖过才能调用,抽象方法没有方法体——publicabstractvoideat();//没有{}
如果要声明出一个抽象的方法,就必须将类也标记为抽象的,不能在非抽象类中拥有抽象方法
必须实现所有抽象的方法——这表示在继承树下的第一个具体类必须要实现出所有的抽象方法 -
Object类是所有类的父类
每个对象都拥有的方法(可覆盖)
A.equals(Objecto)——判断两个对象是否相等
B.getClass()——告诉你该对象是什么类(从哪里被初始化的)
C.hashCode()——列出该对象的哈希代码(对象唯一的ID)
D.toString()——列出类的名称和一串我们不关心的数字
任何从ArrayList<Object>取出的东西都会被当作Object类型的引用而不管它原来是什么
当一个变量被声明为Object类型的对象所引用时,它无法再赋值给原来类型的变量
编译器是根据引用类型(而不是对象类型)来判断有哪些method可以调用
o作为Object的引用,只能调用Object的方法,而不能调用bark()方法
越处于继承树的下端,遥控器的按钮(引用)越多,Object引用的对象按钮最少
如果想要调用Dog类的方法,可以从Object中拷贝出一个Dog引用,并赋值给Dog引用变量
接口
使用接口的目的:接口可以实现多重继承又不会出现致命方块的问题
实现方法:把全部的方法设置为抽象的(接口就像是100%纯天然抽象类)
接口的定义:publicinterfacePet{...};
接口的实现:publicclassDogextendsCanineimplementsPet{...};
不同继承树的类也可以实现相同的接口
类可以实现多个接口
接口的方法都是publicabstract的(默认的)
要从子类调用父类的方法可以用super关键字