关于类、抽象类和接口的继承关系

关于类、抽象类和接口的继承关系

一、类和抽象类

当实体类Impl继承一个抽象类Abstract,该实体类Impl可以不用实现抽象类Abstract中的所有方法,但是必须实现抽象类中的所有抽象方法

二、类和接口

当实体类Impl直接实现接口Interface,那么该实体类Impl必须是想接口Interface里面的所有接口方法

三、抽象类和接口

当抽象类Abstract实现接口Interface,抽象类可以实现接口中的部分接口方法,也可以完全不实现任何接口方法。

理解:因为抽象类的功能类似接口,都是给某种行为或者流程提供统一的抽象的规范,两者的目的都不是去具体实现具体操作,具体的操作需要不同实体类去实现。

四、上面都是只设计两者之间关系的情况,当涉及三者之间关系的时候,情况稍微复杂,但是当你理解实体类、抽象类和接口的存在的目的和意义也就很容易理解

实体类Impl extends 抽象类Abstract implements 接口Interface(注:下面所有情况中抽象类Abstract都不用显式实现接口Interface:即不需要在抽象类Abstract中写Abstract implements Interface,只要方法是实现即可<即:方法的访问权限,修饰词,返回参数,参数列表一样>)

1、 如果抽象类Abstract实现了Interface中的部分方法,那么实体类Impl需要实现抽象类Abstract没有实现Interface中的接口。

例:Interface有三个方法

public void getUp();

public void washFace();

public void eatBreakfast();

Abstract只实现了Interface中的一个方法getUp(),那么Impl就需要实现剩下的两个方法washFace()和eatBreakfast()

2、 如果抽象类Abstract没有实现Interface中的任何方法(当然这种情况在工作中很少遇到,这样Abstract就失去了存在的意义),那么Impl就必须实现接口中的所有方法。

3、 如果抽象类Abstract实现Interface中的所有方法,那么实体类Impl就可以选择性的实现接口Interface中需要的方法

五、实体类继承实体类然后实现接口

实体类AImpl extends 实体类BImpl implements 接口Interface

情况和上面类似(这只是实体类,抽象类和接口关系的一种变化形式)

说明:BImpl不用显式实现接口Interface,只要方法是实现接口Interface的方法即可

总结:抽象类和接口的功能是给相似行为或者功能提供统一规范,不用具体实现某种操作。实体类无论是继承还是实现接口,或者是多继承,只要上层没有被实现的接口或者抽象方法都必须被实现。

原文地址:https://www.cnblogs.com/yanzige/p/8328330.html

时间: 2024-11-07 01:38:20

关于类、抽象类和接口的继承关系的相关文章

类型转换,类与类之间的转换,继承关系,继承与静态变量,子类父类重名,多继承,虚基类

 常量的基本类型转换,例如:int num(10.8),这种方式是隐式转换. 通过函数的构造函数实现转换. 类类转换函数,当构造函数不能将类型转换成基本类型时.所以就有了类类转换函数,通过这种方式. 案例: #include <iostream> class fushu { public: //通过加explicit的这种方式避免隐式转换,避免引发歧义 explicit fushu(int num) { x = num; y = num; } void print() { std::cou

抽象类和接口之间的关系

原文地址:https://www.cnblogs.com/sogeisetsu/p/12239518.html

Java入门系列之类继承、抽象类、接口(五)

前言 C#和Java关于类.抽象类.接口使用方式基本相似,只是对应关键字使用不同罢了,本节呢,我们只是对照C#和Java中关于这三个概念在具体使用时,看看有哪些不一样的地方. 类继承 C#和Java在定义类方式上是一致的,这点没有什么太多要讲解的,我们直接进入到类继承上,在Java中实现继承通过extends关键字,而在C#中则是以冒号(:)来继承,非常优雅而简洁,Java如下: class Animal{} class Tiger extends Animal{} 在C#中如下: class

抽象类与接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的.如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类.比如new Animal

java提高篇(五)-----抽象类与接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的.如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类.比如new Animal

java提高篇(四)-----抽象类与接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的.如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类.比如new Animal

Java 抽象类、接口

抽象类: 当父类的一些方法不能确定时,可以用abstract关键字来修饰该方[抽象方法],同时该类也要用abstract来修饰,该类变成抽象类. 用abstract关键字来修饰一个类的时候,这个类就叫抽象类. 用abstract关键字来修饰一个方法时,这个方法就是抽象方法. 抽象类注意: 抽象方法不能在抽象类中实例化,只能在子类中实现. 抽象类可以没有abstract抽象方法. 一旦一个类包含abstract方法,那这个类必须声明为abstract类. 抽象方法不能有主体. 接口: (一种特殊的

抽象类和接口学习区别

最近复习了一些Java的基础知识,这里总结一下抽象类和接口的区别. 1. abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系.但是,一个类却可以实现多个interface. 2. 在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abst

java 抽象类、接口的使用

理解抽象类 abstract class和interface在Java语言中都是用来进行抽象类(本文 中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法, 请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢? 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样.并不是 所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这