继承

   (1)定义:把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系,
         这多个类就具备了这些内容。这个关系叫继承。
    (2)Java中如何表示继承呢?格式是什么呢?
      A:用关键字extends表示
      B:格式:
        class 子类名 extends 父类名 {}

      

class 父类 {
} class 子类 extends 父类 {
}

  (3)继承的好处:
      A:提高了代码的复用性
      B:提高了代码的维护性
      C:让类与类产生了一个关系,是多态的前提
   (4)继承的弊端:
      A:让类的耦合性增强。这样某个类的改变,就会影响其他和该类相关的类。
         原则:低耦合,高内聚。
         耦合:类与类的关系
         内聚:自己完成某件事情的能力
      B:打破了封装性
   (5)Java中继承的特点
      A:Java中类只支持单继承,不支持多继承,为什么呢?    

      (1)如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该变量时将产生歧义,无法判断应该使用哪个父类的变量

      (2)如果在一个子类继承的多个父类中拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父类的方法

    B:Java中可以多层(重)继承(继承体系)

  (6)什么时候使用继承呢?
      A:继承体现的是:is a的关系。
      B:采用假设法

  (7)重写

    子类中出现与父类一模一样(返回值类型,方法名,参数都相同)的方法时,会出现覆盖操作,也称为override重写、复写或者覆盖。

    好处:子类可以根据需要,定义特定于自己的行为。

    注意事项:

         1、子类方法覆盖父类方法,必须要保证权限大于等于父类权限。

         2、静态只能覆盖静态,或者被静态覆盖。

         3、写法上稍微注意:必须一模一样:函数的返回值类型 函数名 参数列表都要一样。

  (8)super关键字

    当子类重写了父类中的成员变量时,在子类中若要访问父类中的成员变量,必须使用关键字super来完成。

    注意:super和this的用法相似,this:代表本类的对象引用。super:代表的父类内存空间,而不是父类的引用。

  (9)final关键字

    final是个修饰符,它可以修饰类,类的成员,以及局部变量。

final修饰类不可以被继承,但是可以继承其他类。

    final修饰的方法不可以被覆盖,但父类中没有被final修饰方法,子类覆盖后可以加final。

    final修饰的变量称为常量,这些变量只能赋值一次。

    final修饰的引用类型变量,表示该引用变量的引用不能变,而不是引用所指的对象中的数据还是可以变化的;

    
   (10)继承的注意事项:
      A:子类不能继承父类的私有成员
      B:子类不能继承父类的构造方法,但是可以通过super去访问
      C:不要为了部分功能而去继承
   
  (11)Java继承中的成员关系
      A:成员变量
         a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单
         b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢?
            子类的方法访问变量的查找顺序:
               在子类方法的局部范围找,有就使用。
               在子类的成员范围找,有就使用。
               在父类的成员范围找,有就使用。
               找不到,就报错。
      B:构造方法
         a:子类的构造方法默认会去访问父类的无参构造方法
           是为了子类访问父类数据的初始化
         b:父类中如果没有无参构造方法,怎么办?
            子类通过super去明确调用带参构造
            子类通过this调用本身的其他构造,但是一定会有一个去访问了父类的构造
            让父类提供无参构造
      C:成员方法
         a:子类的成员方法和父类中的成员方法名称不一样,这个太简单
         b:子类的成员方法和父类中的成员方法名称一样,这个怎么访问呢?
            通过子类对象访问一个方法的查找顺序:
               在子类中找,有就使用
               在父类中找,有就使用
               找不到,就报错

其他说明:

  1、在创建子类对象时,父类的构造函数会先执行,因为子类中所有构造函数的第一行有默认的隐式super();语句,调用本类中的构造函数用this(实参列表)语句,调用父类中的构造函数用super(实参列表)。

  2、为什么子类对象初始化都要访问父类中的构造函数?因为子类继承了父类的内容,所以创建对象时必须要先看父类是如何对内容进行初始化的。

  3、子类中的构造函数为什么有一句隐式的super()呢?

    原因:子类会继承父类中的内容,所以子类在初始化时,必须先到父类中去执行父类的初始化动作。才可以更方便的使用父类中的内容。

       当父类中没有空参数构造函数时,子类的构造函数必须有显示的super语句指定要访问的父类中的构造函数。

  4、如果子类的构造函数第一行写了this调用了本类其他构造函数,那么super调用父类的语句还有吗?

    这时是没有的,因为this()或者super(),只能定义在构造函数的第一行,因为初始化动作要先执行。

  5、父类构造函数中是否有隐式的super呢?

     也是有的。记住:只要是构造函数默认第一行都是super();

  6、父类的父类是谁呢?super调用的到底是谁的构造函数呢?

    Java体系在设计,定义了一个所有对象的父类Object ,

注意:

    类中的构造函数默认第一行都有隐式的super()语句,在访问父类中的构造函数。

    所以父类的构造函数既可以给自己的对象初始化,也可以给自己的子类对象初始化。

    如果默认的隐式super语句没有对应的构造函数,必须在构造函数中通过this或者super的形式明确调用的构造函数。

java学习笔记 --- 继承的更多相关文章

  1. Java学习笔记---继承和super的用法

    自从换了个视频教学,感觉比原来那个好多了,就是学校网速太渣,好多视频看一会卡半天,只能先看看已经下载的了. 不过也好,虽然不能从开始开始重新开,但是已经看过一次,在看一次也是好的,就当巩固学习了. 继 ...

  2. Java学习笔记--继承和多态(中)

    1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toStrin ...

  3. java学习笔记-继承中super关键字

    背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...

  4. Java学习笔记--继承和多态(下)

    1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toStrin ...

  5. Java学习笔记--继承和多态(上)

    1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toStrin ...

  6. Java学习笔记——继承、接口、多态

    浮点数的运算需要注意的问题: BigDecimal operand1 = new BigDecimal("1.0"); BigDecimal operand2 = new BigD ...

  7. java学习笔记6--类的继承、Object类

    接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...

  8. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  9. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

随机推荐

  1. HTML5 & CSS3 初学者指南(4) – Canvas使用

    介绍 传统的HTML主要用于文本的创建,可以通过<img>标签插入图像,动画的实现则需要第三方插件.在这方面,传统的HTML极其缺乏满足现代网页多媒体需求的能力.HTML5的到来,带来了新 ...

  2. 《JavaScript DOM 编程艺术 》 笔记

    一:这本书由几个案列带入知识点,通俗易懂.最大的收获莫过于作者多次提到的逐渐增强和平稳退化. "渐进增强"指的是给所用用户同等的基本使用体验,再根据用户终端的级别给予更高级的用户更 ...

  3. C++编程练习(13)----“排序算法 之 堆排序“

    堆排序 堆是具有下列性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆(也叫最大堆):或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆(也叫最小堆). 最小堆和最大堆如 ...

  4. 关于hashmap的底层实现

    注:以下内容并非基于最新的jdk版本 q1:hashmap为什么叫hashmap? 答:hashmap基于hashtable(不是hashtable类)实现. q2:hashtable(不是hasht ...

  5. 华为荣耀畅玩5C NEM-UL10 ROOT那些事儿(亲测成功)

    以前ROOT手机都是在手机上安装KingRoot 刷机精灵等软件分分钟成功(不排除偶然,,比如这款华为荣耀...) 手机安装KingRoot等软件,,,失败   电脑上安装连接手机Root,,,,失败 ...

  6. 用9种办法解决 JS 闭包经典面试题之 for 循环取 i

    2017-01-06 Tomson JavaScript 转自 https://segmentfault.com/a/1190000003818163 闭包 1.正确的说,应该是指一个闭包域,每当声明 ...

  7. ArcObjects与ArcEngine的联系与区别

    ArcObjects与ArcEngine的联系与区别 AO一般指的是桌面产品开发组件,需要在桌面环境中才能够使用,最典型的就是嵌入式VBA开发.但是这样带来的弊端和OFFICE等相关软件一样明显,就是 ...

  8. Spark 键值对RDD操作

    键值对的RDD操作与基本RDD操作一样,只是操作的元素由基本类型改为二元组. 概述 键值对RDD是Spark操作中最常用的RDD,它是很多程序的构成要素,因为他们提供了并行操作各个键或跨界点重新进行数 ...

  9. Excel与XML相互转换 - C# 简单实现方案

    Excel与XML相互转换 - C# 简单实现方案 在日常工作中,我需要将数据存储在Excel中进行数据分析和处理,然后再将数据转换为XML格式进行跨平台的数据交换.网上搜索Excel转换为XML的实 ...

  10. mac环境下mentohust锐捷登录配置

    今天测试react native嵌入原生项目,账号流量恰好用完,想换同学账号却不会更改配置,以至于被网络弄得头疼了一中午.于是,好好研究了一下这个mentohust 一.需要下载的文件 我已经全部整理 ...