接口、抽象类、继承、实现的定义及它们之间的关系
2016-12-01 23:20
573 查看
一、接口、抽象类、继承、实现定义
接口接口是一种比抽象类更加抽象的“类”。这里给“类”加引号是我找不到更好的词来表示,但是我们要明确一点就是,接口本身就不是类,从我们不能实例化一个接口就可以看出。如new Runnable();肯定是错误的,我们只能new它的实现类。
抽象类
在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的。如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类。
抽象类通常代表一个抽象概念,他提供一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的。所以,在一个以继承关系形成的等级结构里面,树叶节点应当是具体类,而树枝节点均应当是抽象类。
继承
就是扩展已有类的功能,在继承中分为子类和父类,父类有时候也称为超类(super class),子类有时候称为派生类。
继承的基本语法为:class子类 extends 父类 {}
继承的限制:1)在Java中不允许多重继承,一个子类只能继承一个父类,不能继承多个父类;2)java中允许多层继承;3)在继承中子类不能访问父类中的私有成员,只能继承公共操作。但是私有成员可以通过公共方法得到访问。
实现
类实现接口,本质上与类继承类相似,区别在于“类最多只能继承一个类,即单继承,而一个类却可以同时实现多个接口”,多个接口用逗号隔开即可。实现类需要覆盖所有接口中的所有抽象方法,否则该类也必须声明为抽象类。
二、接口是否可继承接口?
接口是可以继承接口的。比如在项目中需要N个接口,他们都要实现一些常用的功能,这样你就可以只写一个接口,然后让你的其他接口都这个接口。通常IBaseDao就是这样的。定义一个泛型接口,然后让其他接口去继承它并定义各自的泛型类,这样就方便很多。三、抽象类是否可实现(implements)接口?
抽象类可以实现接口四、抽象类是否可继承实体类(concrete class)?
抽象类可以继承实体类,但前提是实体类必须有明确的构造函数。答案很明确,可以继承。其实从Object就是个实体类,java的API文档里,每个抽象类的条目里都明确写着直接或间接继承自Object,所以这点是没有疑问的。class A{} abstract class B extends A{}
结果完全正常,编译通过。似乎和“实体类必须有明确的构造函数”完全没有关系。
这个问题涉及到两个个基础知识:
1.
所有的class都必须有一个构造方法,如果你没有在代码里声明构造方法,系统会自动给你生成一个公有无参的构造方法。而只要你自己声明了一个构造方法,无论有参无参,私有公有,系统就不再帮你生成默认无参构造器了。
2.
所有的子类构造器都要求在第一行代码中调用父类构造器,如果不写,系统默认去调用父类的无参构造器。
所以,如果把系统默认配给的方法也算进去,class A{}的代码实际上是
class A{ public A(){} }
B继承 A 的时候,则是
abstract class B extends A{ public B(){ super(); } }
相关文章推荐
- 抽象类与接口之间的继承和实现关系
- 抽象类与接口之间的继承和实现关系
- Java深海拾遗系列(2)---接口、抽象类、实体类继承与实现关系
- java 接口、抽象类、具体类、内部类、匿名内部类的区别及它们之间的关系
- 接口之间继承、抽象类普通类继承关系总结 (
- 接口的定义——默认加public abstract默认全局常量;与继承不同,子类可以同时实现多个接口;抽象类实现接口;接口继承接口
- java(未检出20130729) String、StringBuffer、类与类之间关系:依赖关系Use-a、.聚合关系has-a、组合继承(“is-a”)、抽象类、接口
- 抽象类,接口继承与实现关系
- 类、抽象类、接口和继承之间的关系
- 你什么让程序员寂寞成酱紫 (男生版 娱乐中学习 抽象类 接口 继承 实现方法 )
- 抽象类与接口之间的关系
- 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
- Effective C# 学习笔记(二十二)多用接口定义实现,少用继承
- C#关于类抽象类和接口之间的关系(Abstract)(Interface)
- java 中实体类,接口,抽象类之间的关系总结
- 接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?
- java抽象类和接口和继承之间关系
- [转] 抽象类可以实现接口,并且可以继承实体类
- 改进C#代码之22:通过定义并实现接口替代继承
- delphi实现一个类继承抽象类并实现接口