java中的多态

本文详细解析了Java多态中成员变量、成员方法及静态方法的行为特点,并通过具体示例展示了它们在编译期与运行期的不同表现。

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

java多态中成员变量,成员方法,静态方法

//多态时
/**
 * 成员的特点为:
      成员变量
 * 1:编译时:参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过 ,没有,编译失败
 *    运行时:参考 引用型变量所属的类中的是否有调用的成员 变量,并运行该所属类中的成员 变量
 *    简单说:编译和运行都 参考等号的左边,

 *  2:成员函数(非静态 )
 *    编译时:参考引用型变量所属的类中的是否有调用的函数,有,编译通过 ,没有,编译失败
 *    运行时:参考 的是对象所属的类中是否有调用的函数
 *    简单说:编译看左边,运行看右边

 *  3.静态函数
 *    编译时:参考引用型变量所属的类中的是否有调用的静态函数
 *    运行时:参考引用型变量所属的类中的是否有调用的静态函数
 *    简单说:编译,运行都 看左边
 *
 *    其实对于静态方法,是不需要对象的,直接用类名直接调用就可
 */

看下面的例子


运行的结果为

zi show
fu static method
3


需要注意的是

静态方法的调用,大部分情况都 是用      类名.方法名   这样调用





### Java多态的具体表现形式 #### 接口实现多态Java中,除了通过继承来实现多态外,还可以利用接口达到相同的效果。一个类能够实现多个接口,并且不同类可以各自实现相同的接口却表现出各异的行为模式[^2]。 ```java interface Flyable { void fly(); } class Bird implements Flyable { @Override public void fly() { System.out.println("Bird is flying"); } } class Airplane implements Flyable { @Override public void fly() { System.out.println("Airplane is flying at high speed."); } } ``` #### 继承层次中的方法重写 当子类覆盖来自其父类的方法时,在运行期间会根据实际对象类型决定执行哪个版本的方法——这便是动态绑定机制发挥作用之处。即使声明类型的引用指向某个特定实例,只要该实例所属的最具体类中有相应方法定义,则优先调用后者[^3]。 ```java public class Animal { public void makeSound(){ System.out.println("Animal sound..."); } } public class Dog extends Animal{ @Override public void makeSound(){ System.out.println("Woof woof!"); } } // 测试代码片段 Animal myPet = new Dog(); // 编译器只知道myPet是一个Animal类型 myPet.makeSound(); // 输出 "Woof woof!" 而不是默认动物叫声 ``` #### 使用 `instanceof` 关键字安全转型 为了防止因强制转换失败而导致程序崩溃(`ClassCastException`)的情况发生,可以在尝试向下造型之前先检查目标对象是否确实属于预期类别之一。如果条件成立则继续操作;反之则采取其他措施处理未知情况[^1]。 ```java if (object instanceof String){ String str = (String)object; } else { // Handle non-string objects here. } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值