Java_Day9(方法的覆盖,多态)

文章目录

方法的覆盖

回忆:方法的重载。
当在同一个类当中,方法完成的功能是相似的,建议方法名相同,这样方便程序员的编程。

  • 使用的情况:
    1.在同一个类中。
    2.方法名相同
    3.参数列表不同:类型,顺序,个数。
    方法的覆盖:
    方法的覆盖又被称为方法的重写(overwrite,override)
  • 什么时候使用方法的覆盖(重写)?
    当父类中的方法已经无法满足子类的需求。
    子类有必要将父类中继承过来的方法进行重新编写。这个重新编写的过程称为方法重写。/方法的覆盖。
    什么条件满足后方法会发生重写呢?
  • 方法重写发生在具有继承关系的父子类之间,返回前类型相同,方法名相同,形参列表相同。(内容不同)
  • 访问权限不能更低,只能更高。
  • 抛出的异常不能更多,只能更少。
  • 建议复制粘贴。
    注意:
    私有方法不能继承,所以不能覆盖。
    构造方法不能继承,所以不能覆盖。(构造方法的方法名与类名必须一样,父子类不能同名,故不能继承 更不可能被重写 可以重载-----某些情况对象的初值不同)
    覆盖只对方法。
    静态方法不能覆盖。

多态

  • 几个概念:
    向上转型(upcasting):
    子类型–>父类型
    又称为:自动类型转换。
    向下转型(downcasting):
    父类型–>子类型
    又被称为:强制类型转换。
    但他们都必须有继承关系。
    多态语法机制:
    Cat 继承于 Animal。
    Animal a2 = new Cat();子–>父类型,java允许。引用a2为Animal类型,指向的对象类型为Cat类型,在运行时还是会以具体的对象Cat运行。
    在这里插入图片描述
    在这里插入图片描述
  • 父类中没有子类的方法,可以向下转型,强制类型转换。
  • 当调用的方法是子类型中特有的,在父类中不存在,必须进行向下转型。
    Animal c2 =new Cat ();
    Cat a2 = (Cat)c2;
    Animal a3 = new Bird();
    Cat c3 = (Cat)a3;此种编译能通过,但无法运行,会发生异常,因为Bird类和Cat之间无继承关系。(自定义)

    向上转型编译通过,运行一定不会出现问题。
    向下转型不一定。
  • 怎么避免出现异常呢?
  • instanceof运算符可以做到。
  • instanceof怎么用?
    语法格式:
    引用 instanceof 数据类型名。
    其执行结果为boolean:
    假设:A instanceof Animal
    结果:ture:A 是Animal类型。
    flase:A不是Animal类型。
    if(a3 instanceof Animal){//a3是Animal的对象。
    强制类型转换。
    }
    多态性,可以增强扩展力,降低耦合度。
发布了50 篇原创文章 · 获赞 8 · 访问量 3076

猜你喜欢

转载自blog.csdn.net/jiahuan_/article/details/104947597