interface接口 和 abstract抽象类的区别

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