方法重写与多态详解

第四章  方法重写与多态


目录

第四章  方法重写与多态

1.方法重写

2.Object类

3.多态

4.抽象类和抽象方法

总结


内容仅供学习交流,如有问题请留言或私信!!!!!

有空您就点点赞


面向对象学习原则:高内聚,低耦合,多聚合,少继承


1.方法重写

@Override:代表此方法是重写方法,可以不加

        方法的重写或方法的覆盖(overriding)

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

        方法重写规则:

  1. 存在子类和父类之间
  2. 方法名相同
  3. 参数列表相同
  4. 返回值类型相同或者是其子类
  5. 访问修饰符权限不能高于父类

方法重写VS方法重载:

   比较项

位置

方法名

参数表

返回值

访问修饰符

方法重写

子类

相同

相同

相同或是其子类

不能比父类更严格

方法重载

同类

相同

不相同

无关

无关


2.Object类

  • Object类是所有类的父类
  • Object类被子类经常重写的方法
    • 方法

      说明

      toString()

      返回当前对象本身的有关信息,按字符串对象返回

      equals()

      比较两个对象是否是同一个对象,是则返回true

      hashCode()

      返回该对象的哈希代码值

      getClass()

      获取当前对象所属的类信息,返回Class对象

  • Object类的equals()方法
    • 比较两个对象是否是同一个对象,是则返回true
    • 操作符==
      • 简单数据类型,直接比较值。
      • 引用类型,比较两者是否为同一对象。
  • Object类的equals()方法与==没区别。
  • 当有特殊需求,如认为属性相同即为同一对象时,需要重写equals()
  • Java.lang.String重写了equals()方法,把equals()方法的判断变为了判断其值

3.多态

        事物的多种形态(同一种事物,条件不同,结果不同)

抽象方法abstract

eg:public abstract void print();

  • 没有实体
  • 必须在抽象类中
  • 必须在子类中被实现,除非子类是抽象类

类型转换
父类转子类大转小向下转型(强制类型转换)
子类转父类小转大向上转型(隐式类型转换)

向上转型:父类的引用指向子类对象,自动进行类型转换。

<父类型> <引用变量名> = new <子类型>();

  • 此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法。
  • 此时通过父类引用变量无法调用子类特有的方法。

-------------------------------------------------------------------------

向下转型:将一个指向子类对象的父类引用赋给一个子类的引用

        即:父类类型转换为子类类型。需强制类型转换

<子类型> <引用变量名> = (<子类型> )<父类型的引用变量>;

  • 在向下转型的过程中,如果没有转换为真实子类类型,会出现类型转换异常

-------------------------------------------------------------------------

instanceof:使用instanceof时,对象的类型必须和instanceof后面的参数所指定的类在继承上有上下级关系。


4.抽象类和抽象方法

        定义类和方法的时候用abstract进行修饰。

eg:

public abstract class Pet{

        public abstract  void  toHospital();

}

  • 抽象类VS普通类:
    • 抽象类不能被实例化
      • 可以创建一个引用变量,其类型是一个抽象类,指向所非抽象的子类实例
    • 普通类可以被实例化

  • 抽象方法VS普通方法:
    • 有无方法体。

---------------------------------------------------------------------------------------------------------------------------------

使用与注意:

  • 抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类
  • 如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
  • 没有抽象构造方法,也没有抽象静态方法
  • 抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用


总结

        练习:这里写练习及链接等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愚人钊呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值