抽象类和接口详解
来源:互联网 发布:淘宝会员名怎么更改 编辑:程序博客网 时间:2024/05/21 07:09
开篇陈词:
学过C++大部分人可能会觉得C++相对其他Java,C#可能更难学点,这里我将要根据自己所学和总结归纳下抽象类和接口的区别。
进入主题:
一、讨论:
1.讨论:抽象类为什么可以有构造方法,接口中为什么不能有构造方法?
抽象类为什么可以有构造方法:
抽象类设计出来是用来实现多态(动态绑定),而且抽象类中可以有函数的具体实现,也就是可以有不是抽象的方法,因此不是抽象方法的构造方法存在抽象类里的的作用是可以做一些初始化的操作。
接口中为什么不能有构造方法:
接口不提供任何具体实现,也就是它里面的方法都是抽象的,它被设计出来用来允许你通过创建一个能够被向上转型为不止一种基类型的类,来实现一种C++多重继承(multiple
2.讨论:抽象类为什么可以有静态方法,接口中为什么不能有静态方法?
抽象类为什么可以有静态方法:
静态方法不能被重写,因为静态方法是类在加载时就被加载到内存中的方法,在整个运行过程中保持不变,因而不能重写.抽象类里的方法不一定要是抽象的,也就不一定要重写,就算都是抽象的方法,继承他的的类是抽象类也可以不重写父类的方法.因此可以存在不能重写的静态方法。
接口中为什么不能有静态方法:
因为接口里的方法都是抽象的,要是有静态的方法也就是抽像的静态方法,又因为抽象的静态方法不存在,所以接口中为什么不能有静态方法.
3.讨论:抽象类为什么不能含有抽象的静态方法,为什么不能有抽象的构造方法?
抽象类为什么不能含有抽象的静态方法:
静态方法必须含有函数体,而抽象方法没有函数体,因此不存在什么抽象的静态方法。
为什么不能有抽象的构造方法:
构造方法必须含有函数体,而抽象方法没有函数体,因此不存在什么抽象的静态方法。
4.同样接口为不能含有抽象的静态方法,也不能有抽象的构造方法。
二、区别详解:
接口和抽象类的区别:
相同点:都不能被直接实例化,都可以通过继承实现其抽象方法。
不同点:
1.接口实现多继承,抽象类不能实现多继承.
2.接口可以用于支持回调;抽象类不能实现回调,因为继承不支持.
3.接口只包含方法(Method),属性(property),索引器(index),事件(event)的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段,属性,包含实现的方法。
4.接口可以作用于值类型(Struct)和引用类型(Class);抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。
5.抽象类能有构造方法,接口中不能有构造方法。
6.抽象类可以有静态方法,接口中不能有静态方法
7.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
8.抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public
9.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public
- 抽象类和接口详解
- 抽象类和接口详解
- 抽象类和接口详解
- 抽象类和接口详解
- 接口和抽象类详解
- 抽象类和接口区别深入详解
- 抽象类和接口的区别详解
- 详解接口和抽象类的区别
- 抽象类和接口的详解
- Java的接口和抽象类详解
- Java的接口和抽象类详解
- Java的接口和抽象类详解
- Java的接口和抽象类详解
- Java的接口和抽象类详解
- Java的接口和抽象类详解
- Java接口和抽象类的详解
- Map接口和AbstractMap抽象类详解
- 详解抽象类和接口的区别
- WeakReference与SoftReference
- PAT Basic level practice 06
- Qt之QSS中替代background-position的方法。
- 如何加载HTML页面页面到另一个界面中
- MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL
- 抽象类和接口详解
- linux多线程
- va_list/va_start/va_arg/va_end深入分析
- hdu2866 数论Prime
- 8.17 问题总结
- 黑马程序员——012——JavaAPI④(集合框架(泛型)、泛型类、泛型方法、泛型限定)
- fputs与fgets
- Servlet和JSP简单理解
- ios通过svg截取头像