2021-01-21
一、方法重写(override)
为什么需要重写?
父类方法不满足子类的需求
什么是方法重写(覆盖)
子类根据需求对父类继承的方法进行重新编写
重写时,可以用super.方法 的方法来保留父类的方法
构造方法不能被重写
方法重写规则
1、方法名相同、参数列表相同、返回值类型相同或者是其子类
2、访问权限不能严于父类
3、父类的静态方法不能被子类重写,父类的非静态方法不能被子类覆盖为静态方法
4、子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法
(注:静态方法中无法使用super)
5、父类的私有方法不能被子类覆盖
6、不能抛出比父类方法更多或者更大的异常
二、方法重写 vs 方法重载
三、多态
什么是多态?
生活的多态:同一种事物,由于条件不同,产生的结果也不同;
java中多态:同一种行为(方法),由于面向的子类对象不同,得到的结果也不同;
内存中多态:父类引用指向子类对象;
为什么使用多态?(好处)
1、简化了代码,优化代码;
2、提高代码的可维护性和可扩展性;
3、子类访问不了自己的方法(缺点)
解决办法:向下转型
使用多态的必要条件
1、一定要有继承
2、一定要有重写
3、父类引用指向子类(父类 对象名 = new 子类();)
多态的实现有三种:
1、父类引用指向子类对象
2、父类作为参数传递
3、父类作为返回值
向上转型(相当于基本类型的自动转换)
1、定义:父类的引用指向子类对象,自动进行类型转换
2、格式:父类 对象名 = new 子类();
注意:
此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法;
此时通过父类引用变量无法调用子类特有的方法;
向下转型(相当于基本类型的强制转换)
1、定义:将一个指向子类对象的父类引用赋予一个子类的引用,
即父类类型转换为子类类型。需强制类型转换
2、格式:子类 对象名 = (子类)父类对象名;
注意:
在向下转型的过程中,如果没有转换为真实子类类型,会出现类型转换异常;
多态的三种实现
1、父类引用指向子类对象: People people = new Student();
2、父类作为参数传递: public void leiCry(Animal animal){ animal.cry(); }
3、父类作为返回值:
多态的应用
使用父类作为方法的形参,是Java中实现和使用多态的主要方式;
使用父类作为方法的返回值,也是Java中实现和使用太多的主要方法;
四、instanceof运算符
instanseof来解决类型转换问题:ClassCastExeption
返回结果是boolean类型,格式:父类 instanseof 子类
1、如何减少在向下转型的过程中,没有转换为真实子类类型的类型转换异常?
Java提供insanceof运算符来进行类型的判断
2、使用intanceof时,对象的类型必须和instanceof后面的参数所指定的类在继承上有上下级关系;
五、Object类:是所有类的父类
equals()方法:判断两个对象的内容是否相同,前提是需要在对象中重写equals()方法;
toString()方法:打印对象的字符串内容,前提需要在对象中重写父类的toString()方法;否则比较两个对象的地址值
hashCode()得到一个整数值
getClass()返回该对象的字节码文件对象