抽象类和抽象方法
抽象方法是有方法声明而没有方法体的函数,必须要用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();
}