面向对象:方法重写与多态规范

本文探讨了Java中的子类重写规则,包括方法访问修饰符、返回值、方法名和参数的匹配,以及@Override注解的作用。讲解了重写、重载的区别,以及toString()和equals()的重写规则。此外,深入解析了多态的概念,涉及抽象类、向上转型、向下转型及其实现。最后概述了面向对象编程的三大特性——封装、继承和多态在实践中的应用。
摘要由CSDN通过智能技术生成

1. 重写

  1. 创建一个子类对象,子类对象调用方法XXX,
    ①如果子类没有XXX方法就调用父类的方法XXX 方法
    ②如果子类重写了XXX 方法就调用子类的XXX方法
  2. 重写规则
    ①访问修饰符不能严于父类
    ②返回值相同或者是其子类
    ③方法名相同
    ④参数相同
    ⑤父类的静态方法不能被重写为非静态方法(静态方法不能被重写),非静态方法不能重写为静态方法
    ⑥子类可以定义和父类同名的静态方法,用来覆盖父类的静态方法
    ⑦父类私有方法不能被重写
    ⑧不能抛出比父类更多的异常

3. @Override 注解
①会校验父类是否含有该方法
②没有注解就不会校验父类是否有该方法

4. 重写 & 重载
名称 位置 访问修饰符 返回类型 方法名 参数
重写 子类 不能严于父类 相同或子类 相同 相同
重载 同类 无关 无关 相同 不同

5. toString();

6. 重写equals
①首先判断对象是否是自己
1. this==obj

②判断参数对象是不是和当前对象是同一个类

  1. this.getClass().equals(obj…getClass())
  2. obj instanceof 类名

③将对象强转为当前对象类型
java.lang.ClassCastException:(可能会出现的异常)(第二步必不可少)

④判断对象具体属性值(自定义)

7. cequals() && == 区别
①==

  1. 如果比较的是基本数据类型,比较的值;
  2. 如果比较的是引用数据类型,比较的地址;

②equals()

  1. 如果不被重写,和== 没有区别
  2. 如果被重写 (看重写的规则是什么)

8. String ss=new String(”aa”); 创建了几个对象?

  1. 一个或者2个
  2. 如果字符串常量缓冲区存在aa ,就创建一个
  3. 如果字符串常量缓冲区不存在aa ,就创建两个对象

2. 多态

①同一个引用类型,指向不同的实例对象执行不同的操作

1. 抽象类,抽象方法
①抽象类,抽象方法用abstract 修饰
②抽象类不可以实例化
③抽象方法没有方法体
④抽象方法只能在抽象类中(有抽象方法的类一定是抽象类)
⑤抽象方法必须被子类实现,除非子类也是抽象类(如果子类也是抽象类,抽象方法可以不实现)

2. 向上转型
①语法

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

②父类的引用调用的方法是子类重写父类的方法,或者继承父类的方法

  1. 如果子类没有XXX方法就调用父类的方法XXX 方法
  2. 如果子类重写了XXX 方法就调用子类的XXX方法

③父类不能调用子类特有的方法

3. 向下转型
①语法
<子类类型> 对象名= (<父类类型>)引用名;
②向下转型需要强转
③在向下转型中,如果没有转换为真实的子类类型 ,会出现异常
java.lang.ClassCastException: pet.Penguin cannot be cast to pet.Dog

4. 多态的必要条件(步骤)
①继承
②重写
③向上转型

5. java 面向对象的特征
①封装
②继承
③多态(抽象)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值