Java基础知识学习:面向对象--继承

目录,更新ing,学习Java的点滴记录

  目录放在这里太长了,附目录链接大家可以自由选择查看--------Java学习目录

面向对象三大特征

  1. 面向对象编程的三大特征:继承、封装、多态

继承_概念和实现

  1. 继承是所有OOP语言和Java语言不可缺少的组成部分.当创建一个类时,总是在继承,因为,除非已明确支出要从其他类中继承,否则就是在隐式地从Java的标准根类Object进行继承.继承是面向对象编程的三大特征之一,它让我们更加容易实现对于已有类的扩展、更加 容易实现对于现实世界的建模。
  2. 主要作用:
     1.代码复用,更加容易实现类的扩展
     2.方便建模
  3. 从英文字面意思理解,extends关键字 的意思是“扩展”。子类是父类的扩展。现实世界中的继承无处不在。比如
    在这里插入图片描述
     上图中,哺乳动物继承了动物。意味着,动物的特性,哺乳动物都有;在我们编程中,如果新定义一个Student 类,发现已经有 Person 类包含了我们需要的属性和方法,那么 Student 类只需要继承 Person 类即可拥有 Person 类的属性和方法。
  4. 示例----实现继承
    在这里插入图片描述
    在这里插入图片描述
  5. 继承要点
     1.父类也称作超类、基类。子类:派生类等。
     2.Java 中只有单继承,没有像 C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。
     3.Java 中类没有多继承,接口有多继承。
     4.子类继承父类,可以得到父类的全部属性和方法 (除了父类的构造方法),但不见得可以直接访问(比如,父类私有的属性和方法)
     5.如果定义一个类时,没有调用 extends,则它的父类是:java.lang.Object。

继承_Instanceof 运算符

  1. instanceof是二元运算符,用来判断某个对象是否是某个类或其子类所创建的对象,如果是返回true,否则返回false
  2. 示例
    在这里插入图片描述

继承_方法的重写

  1. 子类通过重写父类的方法,可以用自身的行为替换父类的行为。方法的重写是实现多态 的必要条件
  2. 方法重写必须要符合的要点—``两同,两小,一大`"
     两同----方法名相同,形参列表相同
     两小----子类方法返回值类型<=父类方法返回值类型,子类方法声明抛出的异常类型<=父类方法声明抛出的异常类
     一大----子类方法的访问权限应比父类方法的访问权限更大或相等
  3. 重写示例
    在这里插入图片描述

继承_final关键字

  1. 根据使用final关键字环境不同,final的含义存在着细微的区别,但通常它指的是"这是无法改变的".不想做改变可能出于两种理由:设计或效率
  2. final使用的三种情况:数据(变量),方法和类
    修饰变量: 对于基本数据类型,final使数值恒定不变,而对于对象引用,final使引用恒定不变(也就是说一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象),但是对象自身却是可以修改的,Java并未提供使任何对象恒定不变的途径.
      final int MAX_SPEED = 120;
    修饰方法:该方法不可被子类重写。但是可以被重载.并且,类中所有的private方法都隐式指定为final的.
      final void study(){}
      在这里插入图片描述
    修饰类: 修饰的类不能被继承。比如:Math、String 等。
      final class A {}
  3. 关于final使用的忠告
     设计类时,将方法指明为final,应该说是明智的,你可能觉得,没人会想要覆盖你的方法,有时这是对的.但请留意你做出的假设.要预见类是如何被复用一般是很困难的,特别是对于一个通用类更是如此.如果你将一个方法指定为final,可能会妨碍其他程序员在项目中通过继承来复用你的类.而这只是因为你没有想到它会以那种方式被使用.

继承_继承和组合

  1. 组合和继承都允许在新的类中放置子对象,组合是显式的这样做,而继承则是隐式的做.
  2. “组合”不同于继承,更加灵活。“组合”的核心就是“将父类对象作为子类的属性”,然后,“子类通过调用这个属性来获得父类的属性和方法”。组合比较灵活。继承只能有一个父类,但是组合可以有多个属性。
  3. 示例
    在这里插入图片描述在这里插入图片描述
  4. 继承除了代码复用、也能方便我们对事物建模。所以,对于“is -a”关系建议使用继承, “has-a”关系建议使用组合.比如:上面的例子,Student is a Person 这个逻辑没问题,但是:Student has a Person 就有问题了。这时候,显然继承关系比较合适。再比如:笔记本和芯片的关系显然是“has-a”关系,使用组合更好。

super关键字

  1. super“可以看做”是直接父类对象的引用。可以通过 super 来访问父类中被子类覆盖的方法或属性。
  2. 使用 super 调用普通方法,语句没有位置限制,可以在子类中随便调用.
  3. 在一个类中,若是构造方法的第一行代码没有显式的调用 super(…)或者 this(…);那么Java 默认都会调用 super(),含义是调用父类的无参数构造方法。这里的 super()可以省略。
  4. 示例—通过子类对象调用父类方法
    在这里插入图片描述

继承树的追溯

  1. 属性/方法查找顺序:(比如:查找变量h)
     查找当前类中有没有属性 h
     依次上溯每个父类,查看每个父类中是否有 h,直到 Object
     如果没找到,则出现编译错误。
     上面步骤,只要找到 h 变量,则这个过程终止。
  2. 构造方法调用顺序
     构造方法第一句总是:super(…)来调用父类对应的构造方法(默认是隐藏的)。所以,流程就是:先向上追溯到 Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。
  3. 静态初始化块调用顺序与构造方法调用顺序一样

猜你喜欢

转载自blog.csdn.net/qq_41649001/article/details/106609232