Java接口和抽象类的区别

Java接口和抽象类的区别

今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征:

继承:存在继承关系的子类和父类

重写:子类对父类的某些方法进行重写(多态下调用的是子类重写的方法)

父类引用指向子类对象:即向上转型,将子类的引用赋给父类的对象

然后,我们调用的时候,就是通过父类的对象去调用方法的。但是,一想接口好像也可以实现多态,并不是抽象类才可以,我们只要多个类实现同一个接口,也可以实现多态,

因此,转着转着,就转到了接口和抽象类的区别了。

接口

接口是一序列方法的声明,一序列方法特征的集合,一个接口只有方法的形状而没有方法的具体实现,接口是Java面向对象提供的一种机制。

Java语言是一种单继承的,在类的继承中可以实现多个接口代替了多继承

接口的申明:

public interface 接口类名称{

}

抽象类

抽象类是描述许多类的公共的地方,它是一个基类,在项目中主要用作很多类的基础类,比如对表中的增删改查,我们可以抽取一个基类来,然后让表结构的类去继承它,这样就省的我们去写那些基本的增删改查了

抽象类的申明:

public abstract 抽象类名称{

}

接口和抽象类的区别

接口和抽象类还是有一定区别的,接口可以看做是抽象类的一种更抽象化,接口是对动作(行为)的抽象,抽象类是对类的抽象,简单的来说,就是接口注重的是方法,而抽象类注重的是属性和方法

接口:

方法完全抽象的,并且方法必须是public,如果写成其他的编译时会报错,如果不写,则默认方法是public abstract

子类用implements来实现接口,子类需要实现接口中的所有方法

接口不可以new操作符实例化一个接口,但可以声明一个接口变量

接口可以继承一个或者多个接口

接口可以有变量,但是这个变量是不可以变的变量,它会自动的变为public static final

抽象类:

可以有方法的实现,但是这个方法不是abstract方法

子类用extends来继承抽象类,如果子类不是抽象类,则子类必须实现抽象类中的所有抽象方法,也可以实现抽象类中的非抽象方法

抽象类中可以有构造器

抽象类中可以有public,protected和default修饰符

抽象类可以继承一个类和实现多个接口

总的区别是:

抽象类可以有构造函数,接口不可以有构造函数

抽象类中可以有普通成员变量,接口中没有普通成员变量,只能有常量

抽象类中的方法可以被static修饰,接口中的方法不可以被static修饰

抽象类中可以有普通方法和抽象方法,接口中的方法全是抽象方法

抽象中的方法可以被public,protected等修饰符修饰,接口中的方法全都是public abstract的方法,如果省略修饰符,则默认的也都是public abstract修饰

一个类只能继承一个抽象类,接口可以被多实现,即一个类只能继承一个类,可以实现多个接口

什么时候使用接口,什么时候使用抽象类

如果你想拥有一些方法,并且这些方法有默认实现,那么久使用抽象类

如果你想实现多继承,那么就是用接口吧,java不支持多继承,但是可以实现多个接口

接口主要用于模块与模块之间的调用

抽象类主要用于当做基础类使用,即基类

猜你喜欢

转载自blog.csdn.net/com_ma/article/details/80712114