这一节我们来看java中的单继承和多重继承。

在java语言中,支持的是单继承,不直接支持多继承,可是对C++中的多继承进行了改良。

那么什么是单继承和多继承呢?

单继承:一个子类仅仅能有一个直接父类。

多继承:一个子类能够有多个直接父类。

这个在java中是不同意的。

为什么不同意呢?我们看一个样例:

class A
{
void method()
{
System.out.println("a");
}
}
class B
{
void method()
{
System.out.println("b");
}
}
class C extends A,B
{
}

对于上面的情况。假设当我们调用C对象的method方法时,就会出现不确定性错误了。java也是以这个问题进行改良,从而不直接支持多继承。

所以我们能够看到,java中不直接支持多继承的原因就是:当多个类中有同样成员时会产生调用的不确定性。

java语言中还支持多重继承。

比方以下的样例就是一个多重继承:

class A
{
}
class B extends A
{
}
class C extends B
{
}

这就是多重继承的形式,对于上面的继承,就出现了继承体系。而在这个继承体系中,A是最顶层类,C是对子类。

通过上面的继承体系我们不难看出。A实现的是最基本最基础的功能。

那么我们在实际开发中应该怎样使用这个继承体系呢?

第一步:查看该体系中的顶层类(这里是A),了解该体系的基本功能。

第二步:创建体系中的最子类对象(这里是C),完毕功能的使用。

通过上面的两步。我们就能够按需使用一个继承体系了。

这两节我们一直在说继承。在9.1中我们也说到继承能够提高代码的复用性,可是我们一定要注意:千万不要为了提高代码复用性去定义继承

这是为什么呢?我们看以下样例:

class A
{
void method1(){}
void method2(){}
}
class B
{
void method1(){}
void method3(){}
}

我们发现两个类中都有method1方法。那么我们为了提高复用性而去继承:

class A
{
void method1(){}
void method2(){}
}
class B extends A
{
void method3(){}
}

B类中确实有了method1方法,能够也同一时候继承了method2方法,但method2方法事实上并非B中的方法。这就出现了问题。

这就让我们必须明白什么时候定义继承:当类与类之间存着所属关系时。就定义继承

那么什么是所属关系呢?比方X是Y中的一种,就是说X属于Y。就是一种所属关系。

我们这样表示所属关系:is a 关系。就是所属关系。

所以当我们发现两个类是一种is a 关系时,我们就能够定义继承。


[javase学习笔记]-9.2 单继承与多重继承的更多相关文章

  1. JavaSE学习笔记(12)---线程

    JavaSE学习笔记(12)---线程 多线程 并发与并行 并发:指两个或多个事件在同一个时间段内发生. 并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在 ...

  2. javaSE学习笔记(17)---锁

    javaSE学习笔记(17)---锁 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8).使用场景进行举例,为读 ...

  3. javaSE学习笔记(15) ---缓冲流、转换流、序列化流

    javaSE学习笔记(15) ---缓冲流.转换流.序列化流 缓冲流 昨天复习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化 ...

  4. JavaSE学习笔记(14)---File类和IO流(字节流和字符流)

    JavaSE学习笔记(14)---File类和IO流(字节流和字符流) File类 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 构造方 ...

  5. JavaSE学习笔记(13)---线程池、Lambda表达式

    JavaSE学习笔记(13)---线程池.Lambda表达式 1.等待唤醒机制 线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同. 比如:线程A用来生成包子的,线程B用 ...

  6. javaSE学习笔记(10)---List、Set

    javaSE学习笔记(10)---List.Set 1.数据存储的数据结构 常见的数据结构 数据存储的常用结构有:栈.队列.数组.链表和红黑树. 1.栈 栈:stack,又称堆栈,它是运算受限的线性表 ...

  7. JavaSE学习笔记(9)---集合类和泛型

    JavaSE学习笔记(9)---集合类和泛型 1.Collection集合 集合概述 在前面我们已经学习过并使用过集合ArrayList<E> ,那么集合到底是什么呢? 集合:集合是jav ...

  8. JavaSE学习笔记(8)---常用类

    JavaSE学习笔记(8)---常用类 1.Object类 java.lang.Object类是Java语言中的根类,即所有类的父类.它中描述的所有方法子类都可以使用.在对象实例化的时候,最终找的父类 ...

  9. JavaSE学习笔记(6)---异常

    JavaSE学习笔记(6)---异常 ​ 软件程序在运行过程中,非常可能遇到问题,我们称之为异常,英文是:Exception,意思是例外.遇到这些例外情况,或者叫异常,我们怎么让写的程序做出合理的处理 ...

随机推荐

  1. SQA定义、质量模型、SQA与测试的关系

  2. easyui权限管理

    在easyui上实现权限的管理 所谓权限:指的是系统中的资源,资源包括菜单资源(学习情况报表,账号审核...)以及按钮资源所谓角色:指的是系统中的权限集合(每一个角色对应着哪些权限集合) 1.一星权限 ...

  3. VS打开文件,解决方案资源管理器自动定位到文件位置

    打开 工具-->选项-->项目和解决方案-->常规,勾选“在解决方案资源管理器中跟踪活动项”

  4. C和C++中动态链接库的创建和链接(原创,装载请注明原处)

    C和C++中动态链接库的创建和链接 1.创建DLL(动态链接库)-C++方式 1.创建DLL(动态链接库-C++方式) 1.在VS(以VS2017为例)中创建DLL动态链接库. 解决方案名称为:MyD ...

  5. python-----定制群发微信消息

    如何使用表格中的信息群发微信消息? 如何读取csv? →   使用内置模块csv 如何按对应信息发送到微信?→  使用第三方库wxpy 以下代码素材自取:链接:https://pan.baidu.co ...

  6. C#语言之字符串和正则表达式

    本文将完成以下两个目标: 一.创建字符串: 二.正则表达式: 首先,我先来介绍一下System.String类: System.String是一个类,专门用于存储字符串,允许对字符串进行许多操作. 使 ...

  7. 单机安装hadoop集群

    一 .安装前准备 1.VMware虚拟内容 2.Linux系统 (CentOS-6.9-min) 镜像文件http://vault.centos.org/ 3.jdk 1.8 rpm或bin文件 ht ...

  8. 可编辑div的createRange()

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 // 在元素的指定位 ...

  9. python接口自动化-token参数关联登录(登录拉勾网)

    前言 登录网站的时候,经常会遇到传token参数,token关联并不难,难的是找出服务器第一次返回token的值所在的位置,取出来后就可以动态关联了 登录拉勾网 1.先找到登录首页https://pa ...

  10. UVA674-Coin Change,用动归思想来递推!

    674 - Coin Change 题意:有1分,5分,10分,25分,50分共5种硬币,数量不限.给你一个n求有多少种方法凑齐n,注意:d[0]=1; 思路:推了前几组样例,可以发现直接用当前状态累 ...