对于面向对象编程(OOP)来说,抽象是其一大特性。在Java中,抽象类和接口是实现面向对象编程的两种是方法。但是有很多相似和不同之处,总结了一些,帮助大家理解抽象类和接口。
一、抽象类
抽象方法
abstract void fun();
抽象方法用abstract修饰,是一种特殊的方法,但只有声明,没有实现。
抽象类
包含抽象方法的类称为抽象类。抽象类没有具体的实现方法,所以抽象类不能用来构造对象。抽象类只有被继承了,定义了抽象方法才实现了其作用。
abstarct class A{
abstract void fun();
};
包含抽象方法的类是抽象类,那么抽象类中可以有其他非抽象方法吗?
答案是可以的,抽象类也有普通成员变量和普通成员函数。
普通类和抽象类的区别?
* 抽象类必须为public或protected,默认为public,因为设置为private就不能被继承了。
* 抽象类中不能构造对象。
* 抽象类中的抽象方法必须在子类中定义,如果未定义,则必须子类也必须是abstract类。
二、接口
接口定义
[public] interface InterfaceName {
}
接口实现
class ClassName implements Interface1,Interface2,[....]{
}
接口中可以含有 变量和方法。但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误)。
而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现。
也就是说,接口中的方法必须都是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。
三、抽象类和接口的区别
- 抽象类可以定义普通成员变量,也可以定义静态常量,但接口只能定义静态常量。
- 抽象类中可以包含普通函数,但接口只能包含抽象方法,静态方法和默认方法。
- 抽象类可以包含初始化块,接口不可以包含初始化块。
- 一个类只能有一个父类,但一个类可以有多个接口。
本文对比分析了Java中抽象类和接口的特点与区别,包括抽象方法的定义、使用场景及其实现方式。同时探讨了两者在变量定义、方法实现等方面的差异。
9万+

被折叠的 条评论
为什么被折叠?



