当前位置: 首页 > wzjs >正文

做化工的外贸网站都有什么阿里域名注册官网

做化工的外贸网站都有什么,阿里域名注册官网,线上网站建设,宣传软文案例Java多态详解 什么是多态? 比如我们说:“驾驶一辆车”,有人开的是自行车,有人开的是摩托车,有人开的是汽车。虽然我们都说“开车”,但“怎么开”是由具体的车类型决定的:“开”是统一的动作&a…

Java多态详解

什么是多态?

比如我们说:“驾驶一辆车”,有人开的是自行车,有人开的是摩托车,有人开的是汽车。虽然我们都说“开车”,但“怎么开”是由具体的车类型决定的:“开”是统一的动作,具体的行为因车不同而不同。这就是生活中的“多态”现象,同一行为,通过不同的事物,可以体现出来的不同的形态。多态描述的就是这样的状态。

多态分为编译时多态和运行时多态。方法重载(overload)实现的是编译时多态(静态多态),而方法重写(override)实现的是运行时多态(动态多态)。

面向对象编程的三大核心特性:封装、继承、多态(这里指的是运行时多态),多态允许同一操作作用于不同对象时产生不同行为。Java中多态的实现依赖于继承、方法重写和向上转型,是代码灵活性和扩展性的关键机制。

多态的核心实现机制

  • 父类引用指向子类对象(向上转型):用父类类型的变量引用子类对象。
  • 方法重写:子类对父类中的方法进行重新定义,保持方法签名相同。
  • 动态绑定:JVM根据对象的实际类型(而非引用类型)决定调用哪个方法。
class Animal {void sound() { System.out.println("动物叫声"); }
}class Dog extends Animal {@Overridevoid sound() { System.out.println("汪汪"); }
}class Cat extends Animal {@Overridevoid sound() { System.out.println("喵喵"); }
}public class Test {public static void main(String[] args) {Animal a1 = new Dog(); // 向上转型Animal a2 = new Cat();a1.sound(); // 输出"汪汪"a2.sound(); // 输出"喵喵"}
}

我们之所以能在运行时调用子类方法,是因为 Java 支持动态绑定

什么是绑定?

绑定指的是一个方法的调用与**方法所在的类(方法主体)**关联起来。对java来说,绑定分为静态绑定(早绑定、编译时绑定)与动态绑定(晚绑定、运行时绑定)。

静态绑定

  • 定义:在编译阶段确定方法调用与具体实现的对应关系。
  • 绑定依据:变量声明类型(编译时类型)。
  • 典型场景:方法重载、private / static / final 方法调用。

动态绑定

  • 定义:在程序运行期间确定方法调用与具体实现的对应关系。
  • 绑定依据:对象实际类型(运行时类型)。
  • 典型场景:父类引用指向子类对象 + 方法重写。

多态的使用场景

方法参数多态性

将父类类型作为方法参数,可以接受任意子类对象:

void makeSound(Animal animal) {animal.sound();
}// 调用
makeSound(new Dog()); // 输出"汪汪"
makeSound(new Cat()); // 输出"喵喵"

集合中的多态

使用接口或父类类型声明集合,存储不同子类对象:

List<String> list = new ArrayList<>(); // 多态的应用
Set<Integer> set = new HashSet<>();

多态的注意事项

方法调用的限制

  • 通过父类引用只能调用父类中声明的方法。
  • 若需调用子类特有方法,必须向下转型。

向上转型与向下转型

  • 向上转型:子类 → 父类(包括接口实现类 → 接口),自动完成,无需显式转换。
  • 向下转型:父类 → 子类(包括接口 → 实现类),需显式转换,存在ClassCastException风险(必须先用instanceof检查)。

静态方法无多态性

静态方法属于类,调用时由引用类型决定,而非实际对象类型:

class Parent {static void method() { System.out.println("Parent"); }
}
class Child extends Parent {static void method() { System.out.println("Child"); }
}Parent p = new Child();
p.method(); // 输出"Parent"(无多态性)

成员变量的访问

成员变量无多态性,访问时由引用类型决定:

class Parent { int value = 10; }
class Child extends Parent { int value = 20; }Parent p = new Child();
System.out.println(p.value); // 输出10

多态的好处

  • 代码扩展性:新增子类无需修改原有代码(符合开闭原则)。
  • 降低耦合度:调用方法依赖父类接口,而非具体子类。
  • 统一化处理对象:通过父类引用统一管理多种子类对象(如集合遍历)。
  • 支持设计模式:如工厂模式、策略模式、模板方法模式等均依赖多态实现。

多态访问规则总结

口诀

“成员变量,静态方法看左边;非静态方法:编译看左边,运行看右边。”

原理:成员变量和静态方法无多态性非静态方法编译阶段检查父类是否有该方法(确保语法正确),运行阶段根据对象实际类型(子类)调用方法(动态绑定)。

http://www.dtcms.com/wzjs/371080.html

相关文章:

  • 河北省住房和城乡建设局网站今日国际重大新闻
  • 宿迁建设局网站a类证查询全网营销公司排名前十
  • 宽屏网站宽度网站竞价推广都有哪些
  • 昆明市做网站上海关键词优化推荐
  • 大型政府网站系统源码最新百度新闻
  • 肇庆 网站建设抖音搜索seo
  • 自助建网站app软件开发制作公司
  • 用dw怎么做网站首页百度指数查询手机版app
  • wordpress会员充值插件seo专员是什么职位
  • 天津哪家制作网站好商丘seo推广
  • 英文网站模板源代码东莞seo优化排名
  • 淘宝网站怎么做的好看个人免费建站软件
  • 广告设计专业毕业设计阜阳seo
  • 绍兴网站专业制作成品短视频app源码的优点
  • 上传的网站打不开 index.asp成都电脑培训班零基础
  • 安徽省建设银行网站宁波seo外包
  • 提供邯郸做wap网站网络推广费计入什么科目
  • 做网站包括什么软件国外网站seo
  • 武汉光谷疫情最新消息西安seo主管
  • 陈木胜导演拍完怒火重案走的吗深圳排名seo
  • 南京市住房和城乡建设厅网站引擎搜索技巧
  • 贵阳网站建设有限公司网络营销课程介绍
  • wordpress架设教程视频阳城seo排名
  • 椒江住房和城乡建设部网站什么软件可以推广
  • 湛江网站制作方案百度热搜广告设计公司
  • 深圳网站推广排名网站制作河南
  • 融资网站建设河北网络科技有限公司
  • wordpress插入大图seo网站推广方案策划书
  • 深圳公司网站如何设计国际时事新闻最新消息
  • 专业的免费网站建设关键词seo排名公司