java(EE)企业级开发基础知识(三)

  • 继承
  1. 什么是继承,继承可以解决代码复用,当多个类存在相同属性时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有子类不需要重新定义这些方法和属性,只需要通过extends来声明继承的父类。

示意图:

继承父子关系.png

  1. 继承的作用
  1. 代码的复用性提高了
  2. 代码的可维护性和扩展性提高了
  1. 继承的十个细节
  1. 子类继承了所有的属性和方法,非私有的属性和方法可以直接访问,但是私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问
  2. 子类必须调用父类的构造器,完成父类的初始化
  3. 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用 super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不通过(所以有继承关系的时候一般都加上一个无参构造,防止出错)
  4. 指定调用父类的构造器,用super(参数列表)
  5. super在使用的时候只能出现在第一行,(super只能在构造器中使用)
  6. super()和this()都只能在构造器中的第一行,所以super()和this()不能存子啊同一个构造器中
  7. java中所有的类都是object 的子类,object 是所有类的基类
  8. 父类构造器的调用不限于直接父类,将一直往上追溯直到 Object 类(顶级父类)
  9. java是单继承机制,子类中只能继承一个父类(直接继承)
  10. 不能滥用继承,两个类必须要满足一定的关系才能够使用继承,比如(is a)Dog is a animal
  1. 继承的本质
    • 继承原理结构图

继承原理结构图.png

  1. super 关键字

概念:代表父类的引用,用于访问父类的属性、方法、构造器

  1. 访问父类的属性和方法,但是不能直接访问父类的private属性和方法
  2. 访问父类的构造器,只能放在构造函数的第一行
  3. 调用父类构造器的好处,明确分工,父类属性由父类声明,子类属性由子类声明
  4. 当子类中有父类的属性和方法时,要访问父类的属性和方法必须通过super,
  5. super访问不限于直接父类,如果爷爷类与本类重名,也可以使用super去访问,如果有多个基类的方法和属性重名,按照继承原理结构图,就近原则
  1. super 和 this的比较
No. 区别 this super
1 访问属性 访问本类中的属性,如果没有此属性,则从父类中继承查找 从父类开始查找属性
2 调用方法 访问本类中的方法,如果没有此方法,则从父类中继承查找 从父类开始查找方法
3 调用构造器 调用本类构造器,必须放在构造器的首行 调用父类构造器,必须方法构造器首行
4 特殊 表示当前对象 子类中访问父类对象
  1. 方法重写/覆盖

钙奶:子类有一个方法,和父类的某个方法名、返回值类型、参数(个数、数据类型、顺序)一样,就说子类的这个方法重写/覆盖父类的方法,关键字(@Override) 8. 重写的细节

  1. 子类的方法,形参列表,方法名,要和父类方法中的形参列表,方法名完全一样
  2. 子类的返回类型和父类的返回类型一样,或者是父类返回类型的子类,如父类返回类型Object ,子类返回类型是String
  3. 子类的方法不能缩小父类方法的访问权限 public > protected > 默认 > priate
  • 多态
  1. 基本内容
  1. 概念:同类对象的同一种行为表现出来的不同形态
  2. 多态机制

a. 编译的时候检查的是夫类型里面的属性和方法有没有,有,则不报错,正常执行没有则报错 b. 运行的时候绑定的是子类型对象空间,调用子类型对象中的属性和方法

  1. 为什么设计多态

a.解决 封装的时候传的是什么数据类型,封装者不清楚 b. 体现差异化,同一类对象的同一种行为表现出来不同的形态

  1. 多态的向上转型(关键字:instanceof)

1.本质:父类的引用指向子类的对象
2. 语法: 父类类型 引用名 = new 子类类型
3. 特点

a. 编译类型看左边 运行类型 看右边
b. 可以调用父类中的所有成员(遵循访问权限)
c. 不能调用子类中的特有成员
d. 最终运行效果看子类的具体实现

  1. 多态向下转型(编译不通过,可以理解强制类型转化,一定要进行强制类型转化,否则很有可能报错(classCastException))
  1. 语法: 子类类型 引用名 = (子类类型) 父类引用
  2. 特点

a. 只能强转父类的引用,不能强转父类的对象
b. 要求父类的引用必须指向的时当前目标类型对象
c. 当向下转型后,可以调用子类类型中所有成员

  1. 多态的好处:提高代码的拓展性、通透性,降低代码的耦合度
  2. 多态的应用 多态数组:数组定义类型为父类类型,里面保存的实际存储类型为子类类型(应用见java练习专题)
  3. 使用场景:同一类对象的同一种行为表现出来不同的形态,满足这一条件者均可以考虑使用多态

猜你喜欢

转载自juejin.im/post/7120514851507535909