java抽象类和接口
抽象类
java中的抽象类是一个特殊的类,可以说它的存在就是为了让子类来继承的,既然涉及到继承就证明了抽象类中是有默认的构造方法的。
1.什么是抽象类
含有抽象方法的类叫抽象类,那什么又是抽象方法呢?抽象方法就是在普通类的基础增加了一个abstract
关键字,并且被abstract
关键字修饰的方法不能拥有方法体(不能拥有大括号)。因为抽象方法都用abstract
修饰,所以抽象方法所在的抽象类也要用abstract
来修饰以此来提高抽象方法的清晰度。
子类(普通子类)继承抽象父类时必须实现抽象父类中的抽象方法,如果子类也是抽象的(即抽象子类),拥有抽象父类的所有能访问到的属性以及方法(包括抽象方法)。
抽象类不能被实例化,只能被继承
注意:java只支持单继承
1.1写法
访问修饰符 abstract class 类名{
//注意声明为抽象方法后就不允许有方法体
//访问修饰符不包括private,其他三个都可以
访问修饰符 abstract 返回值类型 方法名();//可以拥有多个方法
}
1.2 扩展
一个抽象类可以拥有零个或者是多个的抽象方法(虽然没有一个抽象方法可以通过编译,但是失去了本身的意义)。
抽象类不仅可以含有抽象方法,还可以拥有和普通类一样的普通方法、成员变量等。
例如:
public abstract class TestAbstract
{
int age;
abstract void fun();//default修饰
public abstract void fun_1();//public修饰
protected abstract void fun_2();//protected修饰
public void f(){
System.out.println("可以拥有普通方法");
}
}
接口
接口可以说是一个特殊的抽象类,或者说是一个完全的抽象类(抽象类可以看做是一个半抽象类),接口中的所有方法都是抽像方法,并且默认不能拥有普通方法。
接口里面的属性默认都是public final static
修饰的,并且要初始化。
接口里面的方法都是抽象用public abstract
修饰,不允许用protected
修饰,也可以省略public abstract
。
接口没有构造方法
扫描二维码关注公众号,回复:
11528805 查看本文章
一个类只能继承一个父类但是可以实现多个接口,也可以即继承父类即实现接口。
接口也不能实例化,抽象类也不能实例化。
1.1写法
interface 接口名{
public final static int 属性名 = 100;
String 属性名 = 100;//可以省略public final
public abstract void 方法名;//没有方法体
void 方法名;//可以省略public abstract
}
注意:子类重写父类的方法以后不能抛出比父类多的异常。
实现接口示例:
public class InterfaceTest
{
public static void main(String[] args){
A b = new B();
b.fun();
b.sun();
}
}
interface A
{
public abstract void fun();
void sun();
}
class B implements A
{
public void fun(){
System.out.println("实现接口A中的fun方法~~~");
}
public void sun(){
System.out.println("实现接口A中的sun方法~~~");
}
}
运行结果:
抽象类和接口的区别
- 抽象类只支持单继承,而接口可以多次实现(其实也就是相当于多继承了)。
- 抽象类用关键字
abstract
修饰,接口用interface
修饰。 - 抽象类中可以有成员变量和成员方法,而接口中只能是抽象的方法和
public final static
修饰的静态常量,并且接口中的静态常量必须初始化。 - 抽象类使用
extends
关键字,而接口使用implements
关键字。