抽象类和接口详解

来源:互联网 发布:淘宝会员名怎么更改 编辑:程序博客网 时间:2024/05/21 07:09

开篇陈词:

   学过C++大部分人可能会觉得C++相对其他Java,C#可能更难学点,这里我将要根据自己所学和总结归纳下抽象类和接口的区别。

进入主题:


一、讨论:

1.讨论:抽象类为什么可以有构造方法,接口中为什么不能有构造方法?

抽象类为什么可以有构造方法:

抽象类设计出来是用来实现多态(动态绑定),而且抽象类中可以有函数的具体实现,也就是可以有不是抽象的方法,因此不是抽象方法的构造方法存在抽象类里的的作用是可以做一些初始化的操作。 

接口中为什么不能有构造方法:

接口不提供任何具体实现,也就是它里面的方法都是抽象的,它被设计出来用来允许你通过创建一个能够被向上转型为不止一种基类型的类,来实现一种C++多重继承(multiple inheritance 的变种),规定不需要做一些初始化的操作,因此接口中不能有构造函数.

 

2.讨论:抽象类为什么可以有静态方法,接口中为什么不能有静态方法?

抽象类为什么可以有静态方法:

静态方法不能被重写,因为静态方法是类在加载时就被加载到内存中的方法,在整个运行过程中保持不变,因而不能重写.抽象类里的方法不一定要是抽象的,也就不一定要重写,就算都是抽象的方法,继承他的的类是抽象类也可以不重写父类的方法.因此可以存在不能重写的静态方法。

接口中为什么不能有静态方法:

因为接口里的方法都是抽象的,要是有静态的方法也就是抽像的静态方法,又因为抽象的静态方法不存在,所以接口中为什么不能有静态方法.

 

3.讨论:抽象类为什么不能含有抽象的静态方法,为什么不能有抽象的构造方法?

抽象类为什么不能含有抽象的静态方法:

静态方法必须含有函数体,而抽象方法没有函数体,因此不存在什么抽象的静态方法。

为什么不能有抽象的构造方法:

构造方法必须含有函数体,而抽象方法没有函数体,因此不存在什么抽象的静态方法。

 

4.同样接口为不能含有抽象的静态方法,也不能有抽象的构造方法。


二、区别详解:

接口和抽象类的区别:

相同点:都不能被直接实例化,都可以通过继承实现其抽象方法。

不同点:

1.接口实现多继承,抽象类不能实现多继承.

2.接口可以用于支持回调;抽象类不能实现回调,因为继承不支持.

3.接口只包含方法(Method,属性(property),索引器(index),事件(event)的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段,属性,包含实现的方法。

4.接口可以作用于值类型(Struct)和引用类型(Class);抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。

5.抽象类能有构造方法,接口中不能有构造方法。

6.抽象类可以有静态方法,接口中不能有静态方法

7.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

8.抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然 

eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。 

9.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。



0 0
原创粉丝点击