关于Java多态和重载

关于多态和重载

多态

  1. 什么是多态
    多态是同一个行为具有多个不同表现形式或形态的能力。
  2. 多态存在三个条件
    继承
    重写
    父类引用指向子类对象
  3. 体现
  • 父类类型的引用 指向 子类的对象
    Person p = new Teacher();

  • 该引用只能调用父类中定义的属性或方法

  • 如果子类中将父类的方法重写,那么调取方法后执行的结果是子类重写之后的那个结果
    如果父类与子类有同名的属性 执行父类的属性
    如果父类与子类有同名的方法 执行子类重写之后的方法

  • 若想要调用子类中独有的成员
    (强制类型转化) 造型 铸型(向上/向下转型)
    造型时(强制向下转型时) 可能出现一个运行时异常
    ClassCastException 造型 铸型 异常(不是同一个分支 不是继承关系)
    如果想要避免造型的异常 可以用instanceof关键字来进行判断
    对象 instanceof 类 (判断对象属不属于这个类 或者 这个类的子类)

重载

  1. 什么是重载
    如果有两个方法的方法名相同,但参数不一致,那么可以说一个方法是另一个方法的重载。 具体说明如下:

    方法名相同
    方法的参数类型,参数个不一样
    方法的返回类型可以不相同
    方法的修饰符可以不相同
    main 方法也可以被重载
    

区别
1.利用方法重载 ------ 静态加载
静态加载是编译时加载的

2.利用多态 ------动态加载
动态加载是运行时加载的
动态绑定带来的最大好处是使程序的可扩展性达到了最好

### Java多态重载与重写的区别用法 #### 1. **多态** 多态的核心在于通过父类的引用调用子类的方法,从而表现出不同的行为。其实现前提条件如下: - 需要存在继承关系或接口实现关系[^1]。 - 存在方法的重写[^2]。 - 父类引用指向子类对象[^3]。 当满足上述条件时,在编译阶段会依据声明类型的左侧判断可用方法集合(静态绑定),而在运行阶段则根据实际创建的对象类型动态调用对应的方法(动态绑定)。这种特性使得程序更加灵活并增强了可扩展性。 #### 2. **重载 (Overloading)** 重载指在同一作用域内定义多个具有相同名称但参数列表不同的方法。其主要特点包括: - 参数的数量可以不同; - 或者即使数量一致,也需至少有一个参数的数据类型有所差异[^4]。 以下是关于如何区分两个重载版本的例子: ```java public class OverloadExample { public void display(int a) { System.out.println("Integer: " + a); } public void display(String s) { System.out.println("String: " + s); } public static void main(String[] args){ OverloadExample ex = new OverloadExample(); ex.display(5); ex.display("Hello"); } } ``` 此代码展示了基于传入数据类型的自动匹配机制。注意这里并不涉及返回值的变化作为辨别标准之一,因为仅靠更改返回值得不到新的签名用于构成合法重载。 #### 3. **重写 (Overriding)** 重写发生在父子类之间,其中子类提供了一个与其超类中的某个非私有的实例方法相匹配的新实现。具体要求为: - 方法名完全一样; - 形参列表保持一致; - 访问权限不能更严格^。 下面是一个简单的例子展示基本概念以及`super`关键字的应用情况: ```java class Animal{ public void sound(){ System.out.println("Animal makes a sound."); } } class Dog extends Animal{ @Override public void sound(){//标记@Override有助于防止错误发生 super.sound(); //先执行父类功能再添加额外逻辑 System.out.println("Dog barks!"); } } public class TestPolymorphism{ public static void main(String []args){ Animal myPet=new Dog();//向上转型 myPet.sound(); } } ``` 输出将是两行文字分别代表各自的行为表现形式。值得注意的是只有非static成员才支持这样的操作方式,对于类级别的变量或者函数来说它们总是遵循所属类别而非实例化个体去寻找答案路径。 #### 使用场景对比分析 | 特性 | 适用范围 | |--------------|-------------------------------------------------------------------------------------------| | 多态 | 当希望利用统一接口处理多种派生类型的时候非常有用 | | 重载 | 如果需要针对不同类型输入做相应处理而又不想改变原有命名空间的话可以选择这种方法 | | 重写 | 主要是为了定制特定需求下的动作响应流程 | #### 方法调用机制解析 - 对于静态成员而言始终按照声明处所指定的具体类型为准确定最终目标位置。 - 动态关联则是等到真正构建出来的实体之后才会确认到底应该选用哪一个具体的算法实现方案。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值