#Thinking in Java阅读笔记# 第九章 接口

抽象类和抽象方法

抽象方法是有方法声明而没有方法体的函数,必须要用abstract标明。
修饰符 + abstract void f();
而含有一个或者多个抽象方法的类就是抽象类(Abstract Class),必须注明。而抽象类中不要求所有方法都是抽象方法。
abstract class abs{….}
如果新类继承了抽象类,则必须为抽象类中的所有抽象方法提供具体实现,否则新类还为抽象类,这样就没有意义。
抽象类不能实例化,但是可以产生抽象类对象,用来保存非抽象子类的对象。
关键字:extends
抽象类的创建错误示例
抽象类可以包括域与常量

接口 Interface

接口实质上是含有一种或多种抽象方法的完全抽象的,它根本就没有任何的具体实现。接口可以包含常量,默认为static 和 final的,接口中的方法默认是public的,所以在接口定义中的方法可以不指明public,但是实现了接口的类必须将接口方法指定为public,否则这些方法在继承的过程中会引起访问权限的降低。
因为接口的实质是类,所以可以构建接口的对象变量,用来储存实现了这些接口的类的引用。
关键字:implements

interface Rodent{
    void hop();
    void scurry();
}
class Mouse implements Rodent{
    public void hop(){
        System.out.println("Mouse hopping");
    }
    public void scurry(){
        System.out.println("Mouse scurrying");
    }
}

Java的多重继承

在Java中,导出类只能继承于一个基类,但是却可以实现多种接口,并且导出类可以向上转型为每个接口。在按这种方式组合时,必须将类的继承放在前面,后面跟着接口

class Hero extends ActionCharacter implements CanFight,CanSwim,CanFly{
    ...
}

使用接口的原因:1.方便导出类向上转型为各种基类型 2.防止其他人创建某类的对象,确保这仅仅是建立一个接口 3.使得同一接口具有不同的具体实现

通过继承扩展接口

接口的继承有两种方式:
1.继承单个接口

interface Monster{
    void menace();
}
interface Dangerous extends Monster{
    void destroy();
}
class Zilla implements Dangerous{
    public void destroy(){  }
    public void menace(){  }
}

2.继承接口组:只有接口继承才能使用这种语法,extends用于单一类、多基类接口

interface First{
    void CountOne();
    void CountTwo();
}
interface Second{
    void CountThree();
    void CountFour();
}
interface Third{
    void CountFive();
    void CountSix();
}
interface Combo extends First,Second,Third{
    void Count();
}

猜你喜欢

转载自blog.csdn.net/zhou373986278/article/details/78446233