Java面向对象重点之多态

## 多态(Polymorphism)

多态是面向对象编程的重要特性之一,它可以让不同的对象对同一消息作出响应,实现了对象的动态绑定和调用。

### 修饰词和访问权限

修饰词用于设置成员变量和方法的访问权限,访问权限规则如下:

- `public` > `protected` > 默认(包内可见) > `private`

访问范围 public > protected > 默认的 > private

本类: 可以 可以 可以 可以

同包内: 可以 可以 可以 不可以

子类: 可以 可以 不可以 不可以

其他: 可以 不可以 不可以 不可以

### 多态的条件

多态的实现需要满足以下条件:

1. 必须存在父子类关系。
2. 子类必须重写父类的方法。
3. 使用父类型的引用指向子类型的对象。

### 多态的现象

多态表现在成员变量和成员方法的访问上:

- 成员变量:能够访问的变量取决于引用的类型,执行结果取决于引用的类型(编译看左边,运行看左边)。
- 成员方法:能够调用的方法取决于引用的类型,执行结果取决于对象的类型(编译看左边,运行看右边)。

### 使用多态的问题和解决方法

使用多态时,可能会遇到以下问题:

- 不能访问子类特有的成员。
- 解决方法是向下造型(强制转换),但这可能会引发 `ClassCastException` 异常。

为了避免异常,可以使用 `instanceof` 运算符进行类型判断,确保类型转换的安全性。

```java
if (animal instanceof Cat) {
    Cat cat = (Cat) animal;
    cat.catchMouse();
}
```

JDK14 以后,使用 `instanceof` 进行类型判断后,类型转换可以直接在判断中进行。

```java
if (ani instanceof Cat cat) { // JDK14及以后
    cat.catchMouse();
}
```

### 多态的意义

多态能够提高代码的灵活性和可维护性,让程序更具可扩展性。通过多态,可以使代码适应未来的变化,降低耦合度,增加系统的可扩展性和可维护性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值