5.16 重写
重写与重载之间的区别:
- 都是方法的特性
重载的实现条件:
① 一个类中的多个方法
② 方法名相同
③ 参数列表不同|方法签名不同
★(方法签名就是方法和参数列表)
重写的实现条件:
① 两个类
②继承|实现
③方法签名完全相同
重写的需求:
当子类从父类中继承的功能满意 对功能实现不满意的时候 可以在子类对从父类中继承的功能重新实现
调用使用:
- 如果子类中没有重写 调用父类的 父类没有报错
- 如果子类存在重写方法 调用子类中重写后的方法
检测是否为重写方法:
① idea行号后面的位置出现o向上箭头
② 在重写方法上添加注解@Override
不能被重写的方法:
① 被private修饰的方法不能被重写
- 能被子类继承 但是无权使用
② 被final修饰的方法不能被重写
③被static修饰的方法不能被重写
- 可以被继承 但是不能重写
- 如果子类中出现与父类中静态方法同名的方法 要求子类中这个同名的方法也被static修饰
package wang01;
public class Over {
public static void main(String[] args) {
SiCong siCong=new SiCong();
siCong.words();
}
}
class JianLin{
String name="王健林";
//名人名言
public void words(){
System.out.println("先定一个小目标 挣他一个亿!");
}
}
class SiCong extends JianLin{
String name ="王思聪";
@Override
//重写方法
public void words(){
System.out.println("不管朋友有没有钱 反正都没有我有钱!");
}
}
5.17 final 关键字
final 最终的
- 被final修饰的变量为常量
- 被fina1修饰的方法不能被重写
- 被final修饰的类不能被继承 ===> 太监类
5.18 Javabean
Javabean :
- 一系列实体类的统称
定义规范:
1.类是公共的
2.属性私有化
3.至少提供一个空构造
4.公共的访问方式
5.重写equals与toString方法
5.19 多态
多态:
- 一种事物的多种形态|表现形式
行为多态
多态前提:
- 继承│实现
- 要有方法的重写
- 父类的引用指向子类的对象
多态的调用: ===> 由父类引用调用
- 调用成员变量:
编译运行看父类|左边|类型
- 调用成员方法:
编译看父类|左边|类型 【编译时看父类中有没有重写前的方法 如果没有报错】
运行找子类|右边|对象 【运行时运行子类中已经重写的方法】
-
注意:
如果没有配合方法的重写 多态就没有意义
package wang01;
public class Over {
public static void main(String[] args) {
Person1 sc=new Person1();
Student1 ss=new Student1();
Person1 sd= new Student1();
System.out.println(sd.name);
sd.show();
}
}
class Person1{
String name="ddd";
public void show(){
System.out.println("pppp");
}
}
class Student1 extends Person1{
String name="fff";
public void show(){
System.out.println("jjjj");
}
}
5.20 转型
基本:数据类型转换
-
自动类型提升:小—>大
-
强制类型转换:大—>小
- 小范围类型变量=(小范围类型)大范围类型数据;
引用:转型
小:子类 大:父类
- 向上转型:子类–>父类
- 向下转型﹔父类–>子类
- 子类类型变量=(子类类型)父类引用;
需求﹔
★ 当多态调用不能调用子类独有内容时候 可以向下转型 然后调用子类独有内容
java. lang.classCastException类型转换异常
在向下转型的时候 如果指向其他的子类类型 就会遇到这个异常
★ instanceof运算符
- 使用前提:
在向下转型的时候 为了避免类型转换异常 ClassCastException 的出现 可以使用instanceof进行判
断
instanceof是Java的一个二元操作符 和==,>,<是同一类 由于它是由字母组成的 所以也是Java的
保留关键字 它的作用是测试它左边的对象是否是它右边的类的实例 返回boolean类型的数据。
Animal animal = new Dog();
System.out.println(animal instanceof Animal);
System.out.println(animal instanceof Cat);
System.out.println(animal instanceof Dog);
//先判断后转型
if(animal instanceof Dog){
Dog dog = (Dog) animal;
}