JAVA入门笔记~基础知识day06

面向对象三大特征之一

类中的组成

1. 成员变量及方法

1.1 成员变量的分类及访问

  • 静态成员变量
    • 格式: 静态成员变量
  • 实例成员变量
    • 格式: 对象名.实例成员变量
    • 实例成员变量必须有对象进行访问

1.2 成本方法的分类及访问

  • 静态方法
    • 格式: 静态方法名();
  • 实例方法
    • 格式: 对象名.实例方法名();
    • 实例成员变量必须有对象进行访问

1.3 成员方法扩展

  • 静态方法中是否可以直接访问静态方法?
    • 可以
  • 静态方法中是否可以直接访问实例方法?
    • 不可以,实例方法必须用对象访问
  • 静态方法中是否可以直接访问静态成员变量?
    • 可以
  • 静态方法中是否可以直接访问实例成员变量?
    • 不可以.实例成员变量必须用对象访问
  • 实例方法中是否可以直接访问静态方法?
    • 可以
  • 实例方法中是否可以直接访问实例方法?
    • 可以
  • 实例方法中是否可以直接访问静态成员变量?
    • 可以
  • 实例方法中是否可以直接访问实例成员变量?
    • 可以

1.4 成员的访问内存图

成员方法的分类和访问内存图.png

继承

1. 继承的概述和定义

1.1 概述

  • 面向对象三大特征之一
  • 可以提高代码复用性,继承的子类可以直接使用父类中的代码
  • 一个子类只能继承一个父类,一个父类可以有多个子类
  • 继承是"is a"的关系(子类 is a 父类)
  • 子类不仅继承了父类的功能,还可以定义自己的功能

1.2 定义

  • 格式: 子类 extends 父类{}

2. 继承的使用案例

继承的使用案例.png

3. 子类不能继承父类的东西

3.1 确定观点

  • 子类不能继承父类的构造器(无争议)

3.2 争议观点

  • 子类是否可以继承父类的静态成员?(静态是被共享的,子类可以直接访问.共享不是继承)
  • 子类是否可以继承父类的私有成员?(应该有继承,只是不能直接访问)

4. 继承后成员变量及方法的特点

4.1 成员变量

  • 就近原则
    • 父类没有就报错
    • 子类没有找父类
    • 子类有找子类

4.2 成员方法

  • 就近原则
    • 父类没有就报错
    • 子类没有找父类
    • 子类有找子类

4.3 super

  • super代表父类对象引用(super.父类成员变量)
  • 继承后子类调用父类方法: super.父类方法

5. 方法重写

5.1 什么是方法重写

  • 子类继承父类后觉得父类某个方法不能满足自身需求,可以重新一个与该父类方法一样的方法来覆盖父类的该方法.这就是方法重写

5.2 方法重写的要求

  • 子类重写方法的方法名称,形参列表,以及返回值类型必须与父类被重写的方法相同
  • 子类重写的方法的访问权限应该与父类被重写方法的访问权限一样或者更大
  • 子类重写的方法抛出的异常应该与父类被重写方法抛出的异常一样或者更小
  • 规范:申明不变,重新实现

5.3 方法重写的校验注解(@Override)

  • @Override可以帮助检测重写是否成功了,加上以后更加安全,更加优雅,可读性更好
  • Java建议在重写的方法上加上一个注解@Override

6. 构造器

6.1 子类构造器特点

  • 子类的全部构造器一定会先调用父类的无参构造器,在执行自己

6.2 调用父类构造器

  • 继承后_super调用父类有参数构造器来初始化父类的数据

6.3 内存图

继承后子类对象的内存图.png

抽象类

1. 概述

  • 父类觉得子类一定要做某个功能,但是每个子类实现是不一样的。
    子类也只会调用自己重写的方法,所以父类的该方法定义成抽象方法。
    约束子类一定要重写该方法。拥有抽象方法的类就必须定义抽象类

2. 基本使用

  • 抽象方法:
    • 有abstract修饰,只有方法签名,没有方法体。
    • -- public abstract void run();
  • 抽象类:
    • 有abstract修饰的
  • 一个类继承了抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义抽象类

3. 特征

  • 有得有失。
    • 有得:抽象类得到了拥有抽象方法的能力。
    • 失去:抽象类失去了创建对象的能力
  • 抽象类是不能创建对象的
    • 抽象的含义就是不能实例化、不能创建对象的意思
    • 抽象类中可能有抽象方法,抽象方法是不能执行的,所以抽象类不能创建对象
  • 抽象类除了有得有失,其他都具备(成员变量,普通方法,构造器都有)

4. 意义

  • 被继承,抽象类就是为了被子类继承,否则毫无意义。
  • 抽象类体现的是模板思想:部分实现,部分抽象。

5. 模板模式

  • 是前人(技术大牛,或者一些技术协会,或者一些大型知名的IT公司)
    已经研发好或者设计好的优秀软件设计思想,后来者可以直接使用就能够得到很好的软件模式
  • 模板模式的作用:部分实现,部分抽象,可以极大的简化功能代码
  • 模板不能确定的定义成抽象方法,交给实现模板的子类去重写

6. 注意事项

  • 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象
    • 理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。
  • 抽象类一定有而且是必须有构造器,是供子类创建对象时,初始化父类成员使用的
    • 理解:子类的构造方法中,有默认的super(),需要访问父类构造器。
  • 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
  • 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类。
  • 抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想。
    • 理解:抽象类中已经实现的是模板中确定的成员,抽象类不确定如何实现的定义成抽象方法,交给具体的子类去实现。

你可能感兴趣的:(JAVA入门笔记~基础知识day06)