目录
在初中级程序员面试中这是一道很常见的面试题,这题不难但是要想有亮点还是有一定的难度。
接口和抽象类都提供了一个将接口和实现分离的结构化的方法
抽象类-Abstract Class
在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。下面是抽象方法的语法:
abstract void method();
如果一个类包含一个或多个抽象方法则这个类必须限定为抽象类,反过来一个抽象类中不一定包含抽象方法。
抽象类特点
1、抽象类不能被实例化,即不能使用new关键字来实例化对象,只能被继承;
2、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;
3、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;
4、抽象类中的抽象方法只有方法体,没有具体实现;
5、如果一个子类实现了父类(抽象类)的所有抽象方法,那么该子类可以不必是抽象类,否则就是抽象类;
6、抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要用途是被子类调用。
代码示例
动物都有名字,叫声以及叫;动物在叫时,输出 xxx 的叫声是:xxx;
这样我们就可以抽象一个动物类,并定一个一个模版方法speak和一个抽象方法 getCry();让不同的动物去实现这个叫声。
/**
* 抽象动物类,
* 动物都有名字
* 动物都会叫
*/
public abstract class AbstractAnimal {
private String name;
/**
* 不同的动物叫声不同,定义一个抽象方法将叫声的实现由子类实现
*
* @return
*/
public abstract String getCry();
/**
* 动物都会叫,这是一个模版,不管什么动物的叫声输出都是一样的
*/
public void speak() {
System.out.println(name + "的叫声是:" + getCry());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Dog extends AbstractAnimal {
public Dog(String name)