学习目标

  • 面向对象回顾
  • 面向对象的三大特征之一:继承
    • 继承的格式
    • 继承的特点
    • 继承中成员的访问特点
  • 抽象类
    • 抽象类的格式
    • 抽象类的作用
    • 抽象类的注意事项
  • 设计模式-模板方式
  • 匿名对象

    1.继承

    格式:修饰符 calss 类名 extends 父类名{ }
    举例 : public class Student extends People{ … }

    3.1为什么学习继承

  • 继承是将多个相同属性抽取到一个单独的父类中,那么子类再调用这些

属性和行为,只要继承了父类,就可以继承这些属性和行为

3.3 继承的好处 ?

  • 提高代码的复用性
  • 提高代码的维护性
  • 让类与类产生了关系(继承关系) , 是多态的前提

    3.4 继承的特点

  • Java只支持单继承 , 不支持多继承 , 但是可以多层继承

    • 简单理解 : 一个儿子只能有一个亲爹
  • 为什么不支持多继承 ?

    • 因为一个子类如果继承多个父类 , 父类有相同的方法声明, 子类会产生继承冲突 , 所以不允许

      3.5继承中成员之间的特点

  • 成员变量

    • 访问特点-就近原则 : 局部有访问局部的 , 局部没有访问本类成员的 , 本类成员没有访问父类非私有成员
  • 成员方法
    • 访问特点-就近原则 : 子类有调用子类的 , 子类没有调用父类的
  • 构造方法
    • 子类所有的构造方法都会默认去访问父类的空参数构造方法
    • 每个构造方法中默认第一条语句都会有一个super()

如果父类没有空参数构造 , 那么子类如果进行给父类初始化 ?

  • 子类可以通过super(…)访问父类的有参数构造方法
    • 注意事项
  • super()和this()都需要放在第一条,所以二者不可共存

    3.6 方法重写

    Override注解是做什么的,有什么用?

  • @Override是放在重写后的方法上,作为重写是否正确的校验注解,加上该注解后如果重写错误,编译阶段会出现错误提示。建议重写方法都加@Override注解,代码安全,优雅!
  • 重写的方法与被重写的方法 , 名字 , 参数列表需要保持一致
  • 子类和父类的方法声明一样 , 方法体中的内容重新定义
  • 子类重写父类方法时,子类方法访问权限必须大于或者等于父类方法权限(public,默认, protected,private),保持一致即可

    3.7 this和super关键字的区别

  • 调用变量

    • this.变量名 : 访问本类的成员变量
    • super.变量名 : 访问父类的成员变量
  • 调用方法
    • this.变量名 : 访问本类的成员方法
    • super.方法名(…): 访问父类的成员方法
  • 调用构造方法

    • this.构造方法名(…) : 访问本类的构造方法
    • super.构造方法名(….) : 访问父类的构造方法

      4.0 抽象类

  • 抽象类其实就是为抽象方法提供存活的空间 , 需要在类的前面加上上abstract关键字进行修饰

  • 抽象类的作用主要是规范子类必须实现某种规则

    4.1 抽象方法

    一个方法要么有方法体 , 要么是一个抽象方法

    4.2 抽象类的注意事项

  • 抽象方法和抽象类必须使用abstract关键字进行修饰

  • 抽象类中可以抽象方法 , 也可以有非抽象方法 , 抽象方法必须存在抽象类中
    • 抽象方法的作用 : 让子类必须实现此功能
    • 非抽象方法的作用 : 让子类去继承此功能
  • 抽象类不能实例化(创建对象)
  • 抽象类的子类

    • 要么也是一个抽象类
    • 要么重写抽象方法

      5.0 模板设计模式

      5.1 设计模式

      一套良好的编码风格 , 经过众多的开发人员不断的测试总结而来

      5.2 模板设计模式

  • 可以把抽象类 , 看做一个模板 , 非抽象方法理解为模板的通过格式 , 抽象方法是使用者具体完成的业务逻辑

  • 模板已经定义好了通用的结构 , 使用者只要关心自己需要的那部分实现的功能即可

public abstract class Template {
public void write() {
System.out.println(“<<我的爸爸>>”);
// 正文
body();
System.out.println(“啊~这就是我的爸爸.”);
}

  1. public abstract void body();<br />}<br />public class Tom extends Template {<br /> @Override<br /> public void body() {<br /> System.out.println("那是一个秋天 , 风儿那么缠绵 ,记忆中,那天爸爸骑车送我放学回家 , " +<br /> "我的脚卡在了自行车链中 , 爸爸蹬不动, 他就站起来蹬!"<br /> );<br /> }<br />}<br />public class Test {<br /> public static void main(String[] args) {<br /> Tom tom = new Tom();<br /> tom.write();<br /> }<br />}

4. 当日问题小结