抽象类:给出了方法的定义,自己却没有实现的类。
抽象类就是为了让别的类继承的,没有别的类来继承抽象类的话,那这个抽象类就没有存在的意义了,由于抽象类是为了被继承的,所以就不能用final修饰了。
abstract
使用abstract修饰符类表示抽象类以及抽象方法
public abstract class MyTest {
public abstract void t1();//抽象方法没有方法体
public void t2(){//非抽象方法有方法体
}
}
从上面我们可以知道,抽象类中是可以有非抽象方法的。也就是抽象类中的方法
可以有方法体。
public abstract class MyTest {
public void t1(){
}
public void t2(){
}
}
从上面代码我们可以知道抽象类中可以没有任何的抽象方法。但是含有抽象方法的类,必须声明为abstract
同样抽象方法也不能被实例化。同样不能有抽象的构造方法或者抽象的静态方法。
接口
接口并不是类,接口用interface声明。
接口不能被实例化,接口中没有构造方法,接口中所有的方法都是抽象方法。接口支持多实现。
接口中每一个方法都是隐式抽象的,都会默认加上public abstract
接口中的变量,都是默认加上 public static final
接口中的方法是没有方法体的,有实现接口的类去实现接口中的方法
抽象类与接口的区别
接口是不能有私有方法或者变量的,并且接口中的方法只有定义没有实现。
相同点:
都不能被实例化,并且都需要子类去实现或者继承了抽象类或者接口中的方法后才能实例化
不同点:
1.接口中只有定义方法,没有方法实现。而抽象类可以定义和实现方法体。但是Java1.8中可以定义default方法体和main函数。
2.接口用的inplements实现,抽象类用extents继承。一个类可以实现多个接口,但是一个类只能继承一个抽象类。
3.接口强调特定功能的实现,而抽象类强调所属关系。