抽象方法的语法:
abstract void f();
包含抽象方法的类叫做抽象类,抽象类不能实例化,只能被继承。如果一个类包含一个或多个抽象方法,抽象方法必须重写,该类必须被限定为抽象的。(否则编译会出错)反之,如果一个类被定义为抽象的,它可以不包括抽象的方法。
不过一个不包括抽象方法的抽象类是无法建立实例的:
abstract void f();
包含抽象方法的类叫做抽象类,抽象类不能实例化,只能被继承。如果一个类包含一个或多个抽象方法,抽象方法必须重写,该类必须被限定为抽象的。(否则编译会出错)反之,如果一个类被定义为抽象的,它可以不包括抽象的方法。
不过一个不包括抽象方法的抽象类是无法建立实例的:
abstract class NoAbstractMethods {
void f() { System.out.println("f()"); }
}
public class a {
public static void main(String args[]) {
new NoAbstractMethods();
//编译提示出错
}}
接口
interface这个关键字产生一个完全抽象的类,它根本就没有提供任何具体的实现。它允许创建者确定方法名、参数列表和返回类型,但是没有任何方法体。接口只提供了形式,而未提供任何具体的实现。接口的域隐式的是static和final的。导出类的方法必须声明为public,及时不声明,它也是public的。
java中的多重继承
一般情况下,只可以将extends用于单一类,但是可以引用多个基类接口。只需用逗号将接口名一一分隔开即可。
interface CanFight{
void fight();
}
interface CanSwim{
void swim();
}
class ActionCharacter{
public void fight(){}
}
class Hero extends ActionCharacter impements Canfight, Canswim{
public void swim(){}
}
public class Adventure{
public static void t(CanFight x){x.fight();}
public static void u(CanSwim x){x.swim();}
public static void v(ActionCharacter x){x.fight();}
public static void main(String[] args){
Hero h= new Hero();
t(h);//treat it as a CanFight
u(h);//treat it as a Canswim
v(h);//treat it as a ActionCharacter
}
}
接口继承接口又是怎样的呢?
interface CanFight{
void fight();
}
interface CanSwim{
void swim();
}
interface CanFly extends CanFight, CanSwim{
void fly();
}
组合接口时的名字冲突
在打算组合的不同接口中使用相同的方法名通常会造成代码可读性的混乱,请避免这种情况。
总结:
1.适当的原则应该是优先选择类而不是借口。
2.接口是特殊的抽象类,所以适应抽象类的一些规则同样试用与接口。
3.变量默认是public static final ,也只能是这样。
4.方法默认是public,也只能是public,只能是抽象方法。