1.抽象类
public abstract Animal{ //抽象类
public abstract void run(); //抽象方法
public void shout(){ //普通成员方法
System.out.println("shout!");
}
}
abstract关键字,修饰类和方法,表示对某一类的类的进一步抽象
抽象方法没有方法体,也就是没有被实现,而是留给派生类去实现
抽象类没有实例对象(不能new), 子类继承抽象类后,才可以创建实例对象
子类必须重写抽象类的所有抽象方法,除非子类也是抽象类
抽象方法只存在于抽象类中
抽象类中可以有普通方法
抽象类虽然不能创建实例对象,但是有构造方法,因为创建子类的时候,需要调用父类的构造方法
缺点:类只能单继承,不能多继承,所以一个类最多只能继承一个抽象类,不如接口方便
2.接口
普通类:只有普通成员方法(具体实现)
抽象类:有抽象方法(规范)和普通方法(具体实现)
接口:只有抽象方法(规范)
public interface Animal{
int age = 10; //默认属性类型为 public static final
void run(); //默认方法类型为public static
void walk();
}
public Rabbit implements Animal, Zoo, Forest{
public void run(){
//需重写所有方法
}
}
接口是规范,定义了一组规则,没有具体的实现,做到了约束和实现分离
接口不能实例化,也没有构造方法
类可以implement多个接口,相当于实现了多继承