欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

抽象类和接口的区别

程序员文章站 2022-03-10 16:03:56
...

一、抽象类

1、什么是抽象类?

答:类和类之间具有共同特征,将这些共同特征提取出来,形成抽象类。

2、类可以实例化对象吗?

答:由于类本身不存在,因此抽象类无法创建对象。使用抽象类时,写代码可以使用多态(父类型引用指向子类型对象),这里即抽象类作为父类。

3、抽象类中可以包含什么?

① 一般方法、静态方法和抽象方法,且抽象方法必须在抽象类中

② 静态变量和成员变量

abstract class AbstractTest01{
	int a;								// 成员变量
	static int b;						// 静态变量
    public abstract void doSome();      // 抽象方法(只有行为的概念,没有具体的行为实现)
    public void doAnother(){			// 普通方法
    	......
	}
    public static void doOther(){       // 静态方法
    	......
    }
}

4、final 和 abstract 不能联合使用,因为 final 修饰的类无法被继承。

5、一个非抽象的类继承抽象类,必须将抽象类中的抽象方法进行重写。

6、抽象类有构造方法,这个构造方法可以供子类使用。

Exp:子类继承抽象类,子类的无参构造第一行默认是 “super()”,默认调用抽象类的无参构造方法。

抽象类和接口的区别

二、接口

1、什么是接口?

答:接口可看作特殊的抽象类(接口是完全抽象,抽象类是半抽象)。接口也是一种“引用数据类型”,编译后也是一个 .class 字节码文件。

2、接口可以实例化对象吗?

答:由于接口是抽象类的特例,因此接口中也无法实例化和创建对象。使用接口时,写代码可以使用多态(父类型引用指向子类型对象),这里即接口作为父类。

3、接口中可以包含什么?

答:只能包含抽象方法和常量。

接口中的方法默认是 public abstract 类型,可省略; 接口中的变量默认是 public static final 类型,可省略。

4、当一个非抽象类实现接口,必须将接口中所有的抽象方法全部重写。

5、接口支持多继承,一个接口可以继承多个接口,一个类可以同时实现多个接口。
抽象类和接口的区别

三、抽象类和接口区别

1、抽象类中有构造方法,接口中无构造方法。
抽象类和接口的区别
2、接口和接口之间支持多继承,类和类之间只能单继承。

3、一个类可以实现多个接口,但只能继承一个抽象类。

四、何时用抽象类?何时用接口?

* 抽象类一般是对“特征”的抽象。
* 接口一般是对“行为”的抽象。

抽象类表示它是什么,接口表示它能做什么。举一个例子,一个 Person,他有眼睛、肤色,这些描述一个人的特征可以定义在抽象类中,而一个人的行为如打篮球,所以这些可以定义在接口中。
抽象类和接口的区别
抽象类和接口的区别
有个俄罗斯人,他会打篮球,这个类可以这样写:
抽象类和接口的区别
从编程角度看:

1、抽象类适合用来定义某个领域的固有属性,也就是本质,接口适合用来定义某个领域的扩展功能。

2、当需要为一些类提供公共的实现代码时,应优先考虑抽象类。因为抽象类中的非抽象方法可以被子类继承下来,使实现功能的代码更简单。

3、当注重代码的扩展性跟可维护性时,应当优先采用接口。①接口与实现它的类之间可以不存在任何层次关系,接口可以实现毫不相关类的相同行为,比抽象类的使用更加方便灵活;②接口只关心对象之间的交互的方法,而不关心对象所对应的具体类。接口是程序之间的一个协议,比抽象类的使用更安全、清晰。一般使用接口的情况更多。

相关标签: java