JAVA学习第十一天

第十一天
成员方法的访问
1 . 子类继承父类,如果子类的成员方法名和父类的成员方法名不一致的情况:
分别调用即可
2 . 如果子类的成员方法名称和父类的成员方法名称一致的情况
先在子类找,如果存在方法名,就使用
如果子类中不存在,就在父类中找,存在就使用
父类中都没有,就编译报错了
方法的重写
子类出现了和父类一模一样的方法声明
子类出现了和父类一模一样的方法声明
修饰符 返回值 方法名都一样(一模一样)
重写的注意事项
子类重写父类的方法的时候,访问权限不能更低!,最好带上权限修饰符 跟父类一样都是public
要么子类重写父类的方法的时候,访问权限比父类大即可(或者和父类一模一样)
final关键字
子类继承父类的时候,有的时候不需要让子类重写父类的方法
Java提供了一个关键字:
final :状态修饰符 (终态的,无法更改的)
修饰成员变量: 此时变量变为一个常量(自定义常量)
修饰成员方法: 该方法不能被重写
修饰类: 该类不能被继承
子类重写父类的静态的方法的时候,子类的该方法必须静态
静态方法算不上方法重写,但是出现的现象和方法重写的现象一样(多态去讲,静态直接跟类有关系)
final修饰变量初始化时机
定义了,但是没有初始化,什么时候初始化的 ? 一定是在执行完构造方法之前需要对final修饰的变量进行初始化
本身在成员变量位置定义的final修饰的变量(非静态的变量),已经初始化了,后面构造代码块或者构造方法中 都不能再对其赋值了
静态的变量特殊:跟类相关,优先于对象存在
final的应用场景
开发中 定义一个常量:
public static final 数据类型 变量名 = 初始化值;
多态
一个事物在不同时刻的不同状态
多态的前提条件
必须有继承关系 (产生一个中extends (继承)关系)
需要有方法重写
子类继承父类的时候,需要使用子类的功能,需要将父类的功能覆盖掉
必须有父类引用指向子类对象 (向上转型)
在内存中使用子类实例化(创建对象),但是子类继承父类,通过构造方法 让父类初始化
多态的成员访问特点
1 . 成员变量(非静态变量)
编译看左,运行看左边 (看父类)
2 . 构造方法
内存创建的是子类对象,但是存在继承关系,执行构造方法先让父类初始化完毕,然后在初始化子类
3 . 成员方法(非静态) (方法重写,说的非静态的方法!)
编译看左,运行看右 (因为存在方法重写,运行看的右边)
4 . 静态的成员方法
编译看左,运行看左(静态方法算不上方法重写,跟类先关,优先父类进行数据初始化,function方法先进内存)
父类引用.静态方法名()–调用父类的方法
多态的好处
提高代码的维护性(继承来保证)
提高代码的扩展性(由多态保证)
多态的弊端
父类引用指向子类对象(向上转型),无法访问子类的特有功能
多态的前提条件
1 . 继承关系
2 . 方法重写
3 . 父类引用指向子类对象 (向上转型)
需要访问子类特有功能时
1 . 直接在测试的时候,子类去创建自己的对像可以访问,但是从内存角度考虑,重新在堆内存中开辟空间,耗费空间的内存!
2 . 如果能够类似于这种方式:父类引用指向子类对象,访问的是父类,如果能够将父类的引用转换为子类引用是可以的,
将父类的引用强制转换为子类的引用 :向下转型
在多态中,向下转型如果使用不当,那么会出现程序的异常(运行时期异常)
JAVA学习第十一天JAVA学习第十一天
JAVA学习第十一天