接口和抽象类
一、抽象类
1、抽象方法
抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:
1 abstract void function();
abstract即抽象的意思,可以用来修饰方法和类。如果一个类被abstract修饰,即抽象类,抽象类也必须要用abstract修饰。抽象类中有抽象方法,所以无法用抽象类创建对象。
2、抽象类
1 public abstract class Demo4{ 2 private int age = 10; 3 4 public void fun(){ 5 System.out.println(this.age); 6 } 7 8 public abstract void fun2(); 9 }
- 抽象类:包含抽象方法的类。
- 抽象类存在的意义是被继承,因为它本身无法创建对象,如果不被继承,它存在的意义在哪里呢?继承抽象类的子类,必须实现抽象类中的抽象方法。
- 抽象类中可以包含普通的方法和属性,也可以包含静态方法。
3、抽象类和普通类的区别
1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public
2)抽象类不能创建对象,普通类可以
3)如果一个类继承抽象类,则必须要实现抽象类的抽象方法,如果子类未实现,那这个子类也必须是抽象类。
二、接口
1、接口的定义
在java中使用interface关键字表示接口,接口使抽象的概念更进一步。(接口中的方法都是不能有具体实现的)本质上interface这个关键字产生一个完全抽象的类。在interface前可以使用public修饰。
1 public interface Animal{ 2 3 }
2、接口的特点
- 接口中可以含有变量和方法,但是接口中定义的域隐式的是static和final的。接口中的方法默认是public abstract的,且只能是public abstract方法,并且方法不能有具体的实现。
- 一个类要遵循某个接口,或者一组接口,需要使用implements关键字,允许一个类实现多个接口,以此来弥补java中单继承的不足之处。
- 使用接口能达到解耦的目的,以及在一些设计模式中经常用到,例如:策略模式和适配器,工厂等等。
- 接口之间可以多继承
1 interface Dog{ 2 3 } 4 5 interface Pig{ 6 7 } 8 9 interface SuperAimal extends Dog,Pig{ 10 11 }
3、接口和抽象类的区别
1)抽象类可以提供成员方法的实现细节,而接口中所有的方法只能是public abstract方法。不过在jdk1.8之后,接口中也能定义带方法体的方法
1 interface Simple{ 2 3 public static void test(){ 4 System.out.println("ssss"); 5 } 6 7 default void show(){ 8 System.out.println("hi"); 9 } 10 }
2)抽象类中的成员变量的类型可以是各种类型的,而接口中的成员变量只能是public static final类型的。
3)在JDK1.8之前,接口中不能含有静态代码块和静态方法,抽象类是可以的,jdk1.8后,接口中可以有静态方法,但是不能有静态代码块
4)一个类只能继承一个抽象类,即java中只能是单继承。而一个类可以实现多个接口。