第八章 接口与抽象类
抽象
抽象类
抽象类是无法初始化的类
什么时候使用抽象类?
在现实生活中无法new出一个对象的类,如猫和狗继承自动物Animal,但是Animal并没有现实意义的对象,可以new出一个猫,但却不能new出一个动物来。因此需要将Animal父类抽象。
抽象方法
- 抽象的方法代表此方法一定要被覆盖过
- 抽象的方法没有实体
- 方法抽象,类必须抽象;类抽象,方法可抽象可不抽象
- 对于抽象方法的处理:实现或继续抽象,转给下一层继承类处理
object类
object类是所有类的父类
方法:
Boolean equals(Object o) 判断两个对象是否为同一个对象(是否是内存中的同一块存储单元)
int hashCode(Object o)返回此对象的哈希值
class getClass(Object o)返回此对象的父类
String toString(Object o)返回类的名称+哈希编码
类型转换
public void go(){
Dog aDog=new Dog();
Object sameDog=getObject(aDog);
}
public Object getObject(Object o){
return o;
}
这段代码实际用到了object类型的多态引用
编译器是根据引用类型来判断有哪些方法可以调用,如:
ArrayList<Dog> a1=new ArrayList<Dog>();
Dog bDog=new Dog();
a1.add(bDog);
Object o=a1.get(0);
o.bark();
.
.
.
...
class Dog{
.
.
.
public void bark(){
System.out.println("wang");
}
.
.
...
}
以上代码o的引用类型为Object,并没有bark()方法;编译器只管引用的类型,而不是对象的类型。
需要进行类型转换:
Dog d=(Dog)o;
d.bark();
只有在引用变量的类确实有该方法才能调用它。
接口
接口作用:扩展对象功能
接口中的方法都是抽象的,用类实现该接口并实现方法。