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访问修饰符 |