接口和抽象类

Posted liupiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口和抽象类相关的知识,希望对你有一定的参考价值。

一、抽象类
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中只能是单继承。而一个类可以实现多个接口。





以上是关于接口和抽象类的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin接口和抽象类 ( 接口属性和方法定义 | 接口默认方法实现 | 抽象类 )

抽象类和接口的异同

接口和抽象类的相同与区别

接口和抽象类的相同与区别

聊聊抽象类和接口

聊聊抽象类和接口