抽象类与接口
1.两者差异对比
构造方法 | 普通方法 | 静态方法 | 普通成员变量 | 静态成员变量 | 抽象方法 | |
抽象类 | T | T | T | T | T | T 但不能为private类型 |
接口 | F | F | F | F | T 默认且只能为public static final类型,即常量 | T 默认为public abstract类型,推荐不加修饰 |
2.抽象类
/**
* 抽象类
* 1.可以包含构造方法
* 2.可以包含静态成员变量、静态方法
* 3.可以包含抽象、非抽象方法;但抽象方法不能为private
* @author wsz
* @date 2017年12月8日
*/
abstract class AbstractClass{
public AbstractClass() {//构造方法
this.id =666;
}
public int function0() {//普通方法
return 666;
}
@Setter
@Getter
private int id;//成员变量
//静态变量
static String name;
private static String name1;
protected static String name2;
public static String name3;
//静态方法
private static String function1() {return "666";}
protected static String function2() {return "666";}
public static String function3() {return "666";}
//抽象方法
abstract void function4();
// private abstract void function5(); 不可为private
protected abstract void function6();
public abstract void function7();
}
3.接口
/**
* 接口
* 1.不能包含构造方法
* 2.可包含默认为public static final的变量,即常量。不包含普通成员变量
* 3.不能包含静态方法
* 4.不能包含非抽象方法
* 5.包含的抽象方法默认为public abstract修饰的,在使用中推荐不加修饰,保持简洁性
* 说明:JDK8中接口允许有默认实现,那么这个default方法,是对所有实现类都有价值的默认实现
* @author wsz
*
*/
interface InterfaceTest{
// public InterfaceTest() {}; 没有构造方法
// int id; 没有成员变量
public static final int ID = 1; //静态成员变量,即常量
// static int function1(); 没有静态方法
// int function2() {return 1;}; 没有普通方法
public abstract int funtion3(); //抽象方法
}