Java多态(上)

蓮花仙者
发布: 2025-09-04 08:24:01
原创
466人浏览过

介绍

多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:

Java多态(上)

多态性是对象多种表现形式的体现。

现实中,比如我们按下 F1 键这个动作:

如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。

同一个事件发生在不同的对象上会产生不同的结果。

立即学习Java免费学习笔记(深入)”;

多态的优点小褚类型之间的耦合性可替代性可扩充性接口性灵活性简化性多态存在的三个必要条件继承重写父类引用指向子类对象:
Parent p = new Child();
登录后复制
Java多态(上)
向上转型

向上转型、隐式转型、自动转型:子类对象转型为父类对象,可以调用子类重写父类的方法以及父类派生的方法,无法调用子类独有的方法

向上转型的语法:

父类类型 父类引用 = new 子类类型(参数);
登录后复制

代码语言:javascript代码运行次数:0运行复制
<pre class="brush:php;toolbar:false;">public class Test {    public static void main(String[] args){        Animal one=new Animal();//1        Animal two=new Cat();//2        Animal three=new Dog();//3​        one.eat();        two.eat();        three.eat();    }}
登录后复制
向下转型

向下转型、强制类型转换:子类引用指向父类对象,此处必须进行强制类型转换

必须满足转型条件,才能转换

Cutout老照片上色
Cutout老照片上色

Cutout.Pro推出的黑白图片上色

Cutout老照片上色 20
查看详情 Cutout老照片上色
代码语言:javascript代码运行次数:0运行复制
<pre class="brush:php;toolbar:false;">public class Test {    public static void main(String[] args){        Cat temp=(Cat) two;        temp.eat();        temp.run();        temp.getWeight();    }}
登录后复制
instanceof

它的作用是测试它左边的对象是否是它右边的类的实例

Java多态(上)
代码语言:javascript代码运行次数:0运行复制
<pre class="brush:php;toolbar:false;">public class Test {    public static void main(String[] args){            if (two instanceof Cat) {            Cat temp = (Cat) two;            temp.eat();            temp.run();            temp.getWeight();            System.out.println("two可以转换为Cat类型");        }​        if (two instanceof Dog) {            Dog temp2 = (Dog) two;            temp2.eat();            temp2.sleep();            temp2.getSex();            System.out.println("two不能转换为Dog类型");        }​        if(two instanceof Animal){            System.out.println("Animal");        }​        if (two instanceof Object){            System.out.println("Object");        }    }}
登录后复制
案例代码语言:javascript代码运行次数:0运行复制
<pre class="brush:php;toolbar:false;">public class Master {    //方案一:编写方法传入不同类型的动物,调用各自的方法    public void feed(Cat cat){        cat.eat();        cat.playxq();    }    public void feed(Dog dog){        dog.eat();        dog.sleep();    }    //方案二:编写方法传入动物的父类,方法中通过类型转换,调用指定子类的方法    public void feed(Animal obj){        if (obj instanceof Cat) {            Cat one = (Cat) obj;            one.eat();            one.playxq();        }else if (obj instanceof Dog){            Dog two=(Dog) obj;            two.eat();            two.sleep();        }    }}
登录后复制
抽象类

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

abstract
登录后复制
:抽象类不允许实例化,可以通过向上转型,指向子类实例

代码语言:javascript代码运行次数:0运行复制
<pre class="brush:php;toolbar:false;">public abstract class Animal{}
登录后复制

经过

abstract
登录后复制
修饰的方法是抽象方法,抽象方法不允许包含方法体;子类中需要重写父类的方法

代码语言:javascript代码运行次数:0运行复制
<pre class="brush:php;toolbar:false;">public abstract void eat();
登录后复制

包含抽象方法的类一定是抽象类

static
登录后复制
final
登录后复制
private
登录后复制
不能与
abstarct
登录后复制
并存

以上就是Java多态(上)的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号