2021-01-21

一、方法重写(override)

为什么需要重写?

父类方法不满足子类的需求

什么是方法重写(覆盖)

子类根据需求对父类继承的方法进行重新编写
  重写时,可以用super.方法 的方法来保留父类的方法
  构造方法不能被重写

方法重写规则

1、方法名相同、参数列表相同、返回值类型相同或者是其子类
  2、访问权限不能严于父类
  3、父类的静态方法不能被子类重写,父类的非静态方法不能被子类覆盖为静态方法
  4、子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法
  (注:静态方法中无法使用super)
  5、父类的私有方法不能被子类覆盖
  6、不能抛出比父类方法更多或者更大的异常

二、方法重写 vs 方法重载

JAVA静态方法无法调用 java静态方法不能被重写_父类

三、多态

什么是多态?

生活的多态:同一种事物,由于条件不同,产生的结果也不同;
 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()返回该对象的字节码文件对象