面向对象的三个基本特征----多态

本文深入解析了面向对象编程中的多态特性,详细介绍了多态的使用规则、对象创建方式及访问成员变量和方法的特点,并通过具体示例展示了如何利用多态提高代码的扩展性和复用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多态

多态: 一种事物的多种状态

多态使用的规则:

1.类和类之间必须要有继承关系

2.要有对方法的重写(否则多态无意义)

3.(核心):父类的引用指向子类的对象空间---向上转型

多态的对象创建方式:

Animal aCat = new Cat; // 父类的引用(指针)指向子类的对象(空间) 向上转型
aCat.eat();

多态时 访问成员变量:

父类的引用只能访问子类空间中属于父类的那块空间

编译时 需要查看父类中是否有这个属性(成员变量),没有则出现编译错误

运行时 访问的是父类中的这个成员变量

结论: 当使用多态形式创建对象 访问成员变量时 编译和运行都看父类中的属性

多态时 调用成员方法:

编译时 需要查看父类中是否有该方法 没有则报错,有就编译通过

运行时 调用的是子类重写的父类的方法

结论: 当使用多态形式调用成员方法时 编译看父类 运行看子类(重写的父类方法)


使用多态的优点:

1. 减少代码量 提高工作效率 复用性强

   相当于提高了代码的可维护性 (通过继承)

2. (核心)提高了方法的扩展性

多态的弊端:

当使用多态的方式创建对象时 无法直接调用子类中特有的方法

多态调用子类的特有方法时 需要注意:

必须要先有向上转型

才能进行向下转型

//创建多态对象
Person p = new PianZi(); // 向上转型
p.speak(); // 继承 共有方法

PianZi pZ = (PianZi)p; // 向下转型 将p强转为PianZi类型(子类)
pZ.hit(); // 调用特有方法

多态的核心特点: 提升方法的扩展性

public class Play {
     public static void main(String[] args) {
     SharpShooter sharpShooter = new SharpShooter();
     fun(sharpShooter);
     fun(new Swordman()
);
    }
     public static void fun(Part part){
       // 调用重写的方法
       part.name();
      }
}
class Part {
    public void name(){
         System.out.println("角色名字");
     }
}
class SharpShooter extends Part{
      // 重写父类方法
      @Override
	public void name() {
		System.out.println("神枪手");
	}
        // 特有方法
        public void shoot() {
		System.out.println("子弹填充");
	}
}
class Swordman extends Part {
    // 重写父类方法
      @Override
	public void name() {
		System.out.println("剑士");
	}
        // 特有方法
        public void ability() {
		System.out.println("里鬼剑术");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值