您的位置:首页 > 编程语言 > Java开发

HeadFirstJava——8_接口与抽象类

2016-07-11 14:32 267 查看
继承只是个开始,要使用多态,还需要接口(这里的接口不是GUI的I代表的接口)。

一、抽象类

1 不该初始化的类

有些类不应该被初始化,即不能”new“出来,如Animal类对象是什么样?

一定要有Animal类继承和产生多态,但要限制只有它的子类才能被初始化。

通过标记类为抽象类,即可告知编译器该类不能创建任何类型的实例。

2 抽象类

抽象类除被继承,是没有用途、没有值、没有目的;

在类的声明的前面加上抽象类关键词abstract;

如下,将Canine类声明为抽象类;

abstract public class Canine extends Animal{
public void roam(){ }
}

public class MakeCanine{
public void go(){
Canine c;
c = new Dog(); // 将子类对象赋值给父类的引用
c = new Canine(); // 因为Canine是抽象类,因此无法实例化,编译不通过
c.roam();
}
}
注意:具体类指不是抽象的类;

3 抽象方法

除类,还可将方法标记为abstract;

抽象的类代表此类必须被extends过,抽象的方法代表此方法必须被覆盖过;

抽象的方法没有实体,直接以分号结束;

public abstract void eat();
声明一个抽象方法,必须将类也标记为抽象类,即不能在非抽象类中拥有抽象方法,但抽象类中可有抽象和非抽象的方法;

在继承树结构下的第一个具体类必须实现所有的抽象方法,也可通过抽象机制将实现的任务交给下层;

4 Object类

在Java中所有类都是Object类直接或间接继承的子类;

编译器通过引用类型来判断有哪些方法可被调用,不是通过对象实际的类型,因此只能在引用变量的类确实有该方法才能调用它;

从ArrayList<Object>取出的对象只能被Object引用,不然就要用类型转换来改变;

Object引用变量在没有类型转换情况下,不能赋值给其他类型,若堆上的对象类型与所要转换的类型不兼容,则次转换会在执行期间产生异常;

二、接口

1 多重继承问题

Java不允许多重继承,因为会有致命方块的问题;

2 接口概念

接口就像100%纯天然抽象类,所有接口的方法都是抽象的;

3 接口定义

使用interface代替class来声明接口,且接口的方法一定是抽象的;

public interface Pet{
public abstract void play();
}
4 接口实现

必须在实现接口的同时,实现接口的所有方法;

public class Dog extends Canine implements Pet{
public void play(){
// ...
}
}
extends只能有一个,implements可以有多个;

public class Dog extends Animal implements Pet, Saveable, Paintable{
// ...
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: