1抽象类
当定义一个类时,常常需要定义一些方法来描述类的行为特性,但有时这些方法的实现方式是无法确定的。例如在Animal类中,shout方法用户表示动物的叫声,但是针对不同的动物叫声不同,因此在shout方法中无法准确的描述动物的叫声。
针对这种情况,java中允许定义方法时不写方法体,即抽象方法,抽象方法必须使用abstract关键字修饰,如下:
abstract oid shout(); //定义抽象方法shout。
所以,抽象类是为了把相同的但不确定的东西的提取出来,为了以后的重用。定义成抽象类的目的,就是为了在子类中实现抽象类。
用abstract修饰的类,即抽象类;用abstract修饰的方法,即抽象方法。
在定义抽象类时需要注意:
1包含抽象方法的类必须声明为抽象类,但抽象类中不一定含有抽象方法。
2抽象类不能被实例化,因为抽象类中可能包含抽象方法,抽象方法是没有方法体的,不可以被调用。
3如果想调用抽象类中定义的方法,需要创建一个子类,在子类中实现抽象类中的抽象方法。
例子:
abstract class Animal{
abstract void shout(); //定义抽象方法shout
}
class Dog extends Animal{
void shout(){
System.out.println("汪汪");
}
}
public class Demo{
public static void main(String[] args){
Dog dog=new Dog(); //创建dag类的实例对象
dog.shout(); //调用shout方法
}
}
结果:汪汪
运行结果可以看出,子类实现了父类的抽象方法。
2接口
如果一个抽象类中所有的方法都是抽象的,则可以将这个类用另外一种方式定义,即接口。在定义接口时需要使用interface关键字,例:
interface Animal {
int ID=1; //定义全局变量
void eat();
void shout();
}
因为接口中 定义的方法和变量包含了一些默认的修饰符,接口中定义的方法,默认使用“public abstract”来修饰,接口中的变量默认使用"public static final"来修饰。
接口中的一些特点:
1 接口中的方法都是抽象的,不能实例化。
2 当一个类实现接口时,如果这个类是抽象的,则实现接口中的部分方法即可,否则需要实现接口中的所以方法。
3 一个类通过implements实现接口时,可以实现多个接口,中间用逗号隔开。
4 一个接口可以通过extends关键字继承多个接口,接口直接用逗号隔开。
5 一个类在继承另外一个类时同时还可以实现接口,此时extends关键字必须位与implements之前。