interface语法特征
1.使用interface关键字
2.接口中,允许定义“抽象方法” ;public abstract可以省略。
3.接口中,允许定义“默认方法” ,通过default关键字定义默认方法语法
4.接口之间允许多继承
5.实现类通过implements关键字实现接口,可以同时实现多个接口
6.接口是抽象的,不可以实例化
7.类和方法都不可以加final
代码解释
/* * 语法1:使用interface关键字定义 * 语法2:接口中,允许定义“抽象方法”,public 和 abstract关键字 * 语法3:接口中,允许定义“默认方法” * 语法4:实现类通过implements关键字实现接口,可以同时实现多个接口 */ public interface MyInterface { //允许定义“抽象方法” void dosth(); public abstract void dowork(); //允许定义“默认方法” public default void dolist() { } // 不允许定义构造方法 // public MyInterface() // 不允许定义”普通方法” // public void dolist(){ /*....*/ } } //Ext类通过implements关键字实现了MyInterface,AnotherInterface接口 //并实现了实现类所定义的抽象方法 class Ext implements MyInterface,AnotherInterface{ @Override public void dosth() { } @Override public void dowork() { } @Override public void abstTodo() { } }
abstract语法特征
1.使用abstract关键字
2.抽象方法必须定义在抽象类中
3.抽象父类如果定义了抽象方法,子类必须实现该方法(重写);抽象子类除外
4.抽象方法是使用abstract关键字定义方法,没有方法体
5.抽象类是单一继承的,一个子类只能继承一个父类
6.抽象类不可以实例化
7.类和方法都不可以加final
代码解释
/* * 1.使用abstract关键字定义的是抽象类 2.抽象类中只允许使用抽象方法 3.抽象方法使用abstract关键字定义的方法,并且没有方法体 4.抽象父类如果存在抽象方法,则子类必须实现该方法(抽象子类除外) 5.抽象类不允许实例化 */ public abstract class AbstractClass { //常量 public static final int Max = 521;//常量大写,一旦final不可变 //抽象方法 public abstract void doSth(); //普通方法 public void dowork() {/*.....*/} //构造方法 public AbstractClass() {/*.......*/} } //抽象子类 可以不用重写子类方法 abstract class Exit extends AbstractClass{ public abstract void doList(); } //子类 class son extends Exit{ @Override public void doList() { } @Override public void doSth() { } }
比较图
abstract抽象类 | interface接口 | |
定义 | 使用abstract关键字 | 使用interface关键字 |
继承 | 只能extends继承一个类 | 可以implements多个接口,并且接口之间允许多继承 |
字段(成员变量) | 可以定义字段(成员变量) | 不能定义字段(成员变量) |
常量 | 使用static final关键字定义常量 | 无需任何关键字,只能定义常量 |
抽象方法 | 可以定义抽象方法 | 不可以定义抽象方法 |
非抽象方法 | 可以(普通方法) | 可以定义default方法(默认方法) |
构造方法 | 可以有构造方法 | 不可以有构造方法 |
访问修饰符 | 可以使用任意访问修饰符 | 只能用public访问修饰符 |