1.定义方法的关键字
抽象类 abstract 为了把相同的东西提取出来,即重用
public abstract class Animal {
}
接口 Interface为了把程序模块进行固化的契约,是为了降低偶合
public interface Food {
}
2.概念
抽象类:
如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类
接口:
接口并不是类,接口包含类要实现的方法。除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
3.成员变量
抽象类
抽象类中的成员变量可以是各种类型的:
private String name;变量
int x=45;常量
public static String y = "动物";全局常量
而接口中的成员变量只能是 public static final
类型的且必须给其初值.
public static final String name = "";
4.构造方法
抽象类可有构造方法
public abstract class Animal {
private String name;
int x=45;
public static String y = "动物";
public Animal(String name, int x) {
this.name = name;
this.x = x;
}
}
接口不能有构造方法
5.权限
抽象类可以是各种权限:private
protected
public
接口只能是:public
6.成员方法
抽象类可以有普通方法和抽象方法
Abstract
关键字同样可以用来声明抽象方法
抽象方法只包含一个方法名,而没有方法体。
抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。
抽象方法子类必须实现
public abstract class Animal {
public void helloworld(){
System.out.println("hello world");
}
public abstract double computePay();
}
接口可以有抽象方法和默认方法
public interface Food {
public abstract double computePay();
//因为在接口中 public是默认的可以省略,abstract也可以省略 不是default方法就是抽象方法
//即 double computePay();
default void f() {//java8增加的 默认方法子类可以选择不实现
System.out.println("start...");
}
}
7.子类使用
抽象方法是关键字extends
继承一个抽象类
接口是关键字implements
实现多个接口


8.关系
一个抽象类可以实现多个接口
一个接口不能继承抽象类,但可以继承多个接口
9.局限
抽象类只能单继承。子类继承了这个抽象类,就不能继承其他的了
接口可以多继承即子类可以实现多个接口
所以:抽象类和接口全部都可以使用的时候优先考虑接口,因为接口没有单继承局限性
总结
区别 | 抽象类abstract | 接口interface |
---|---|---|
定义语法 | abstract class 类名称 | interface接口名称 |
组成 | 常量,全局常量,变量,构造方法,普通方法,抽象方法 | 全局常量,抽象方法,默认方法 |
权限 | 可以是各种权限 | 都是public权限 |
使用 | 子类通过extend继承一个抽象类 | 子类通过implements实现多个接口 |
关系 | 一个抽象类可以实现多个接口 | 一个接口不能继承抽象类,但可以继承多个接口 |
局限 | 只能单继承 | 可以多继承 |
网友评论