【Java面向对象】多态的详细介绍,简单易懂,看这一篇就够了

这篇具有很好参考价值的文章主要介绍了【Java面向对象】多态的详细介绍,简单易懂,看这一篇就够了。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


什么是多态

A: 方法或对象具有多种形态,是面向对象的第三大特征,多态是建立在封装和继承的基础之上的。简单来说,多态是具有表现多种形态的能力的特征。


多态的优点

  • 消除类型之间的耦合关系
  • 可替代性
  • 可扩充性
  • 接口性
  • 灵活性
  • 简化性

多态的分类

重载式多态

重载式多态在编译时已经确定好了。方法名相同而参数列表不同的一组方法就是重载。在调用这种重载的方法时,通过传入不同的参数最后得到不同的结果。

案例

public void add(int a, int b) {
    int c = a + b;
    System.out.println("两个整数相加得 " + c);
}
public void add(float a, float b) {
    float c = a + b;
    System.out.println("两个float型浮点数相加得" + c);
}

重写式多态

重写式多态是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。也就是说,只有程序运行起来,你才知道调用的是哪个子类的方法。 这种多态通过函数的重写以及向上转型来实现,我们接下来讲的所有多态都是重写式多态,因为它才是面向对象编程中真正的多态。

多态的向上转型

Q:什么是多态的向上转型?
A:父类的引用指向子类的对象叫做向上转型。

Q:向上转型的怎么写?
A:父类类型 引用名 = new 子类类型();

Q:向上转型有什么特点?
A:编译类型看左边,运行类型看右边。可以调用父类中的所有成员。最终运行效果看子类的具体实现。

案例

 //动物类,拥有一个call()方法
class Animal {
    public void call() {
        System.out.println("动物叫!");
    }
}
 // 狗类,实现父类动物,并重写call()方法
class Dog extends Animal {
    public void call() {
        System.out.println("汪汪!");
    }

    public void color() {
        System.out.println("狗狗颜色!");
    }
}
 // 猫类,实现父类动物,并重写call()方法
class Cat extends Animal {
    public void call() {
        System.out.println("喵~");
    }

    public void color() {
        System.out.println("猫猫颜色!");
    }
}
 //测试类
public class Test {
    public static void main(String[] args) {
 	    //向上转型
        Animal animal = new Dog();
        animal.call();
        animal = new Cat();
        animal.call();
    }
}

这里 Animal animal = new Dog();将子类对象Dog转化为父类对象Animal,这个时候Animal引用指向的是子类对象,所以调用的方法是子类方法。
向上转型时,子类单独定义的方法会丢失。比如,上面案例中的Dog类和Cat类都定义了自己的call方法,当进行了向上转型后,Animal引用指向Dog类的实例时是访问不到color方法的,Animal.color()会报错。

多态的向下转型

Q:什么是多态的向下转型?
A:子类引用指向父类对象(父类型,实例是子类的实例化)叫做多态的向下转型。通常需要进行强制类型转换。

案例

 //动物类,拥有一个call()方法
class Animal {
    public void call() {
        System.out.println("动物叫!");
    }
}
 // 狗类,实现父类动物,并重写call()方法
class Dog extends Animal {
    public void call() {
        System.out.println("汪汪!");
    }

    public void color() {
        System.out.println("狗狗颜色!");
    }
}
 // 猫类,实现父类动物,并重写call()方法
class Cat extends Animal {
    public void call() {
        System.out.println("喵~");
    }

    public void color() {
        System.out.println("猫猫颜色!");
    }
}
 //测试类
public class Test {
    public static void main(String[] args) {
    	//向上转型
    	Animal animal = new Dog();
 	    //向下转型
        Dog dog = (Dog)animal;//向下转型,强制类型转换
        dog.color();//输出狗狗颜色!
        Cat cat = (Cat)animal;//报错
        Animal animal = new Animal();
        Dog dog = (Dog)animal;//报错
    }
}

这里需要注意Dog dog = (Dog)Animal;可以正常运行,是因为dog本身就是Dog对象,可以正常转型为Dog,而不能转型为Cataniaml类是Animal对象,他也不能向下转型成任何子类对象。

总结一下:

1)向下转型的前提是父类引用指向的是子类对象,也就是说,向下转型之前,它得先进行过向上转型。
2)向下转型只能转型为本类对象。文章来源地址https://www.toymoban.com/news/detail-808651.html

到了这里,关于【Java面向对象】多态的详细介绍,简单易懂,看这一篇就够了的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从零开始学习 Java:简单易懂的入门指南之多态(十)

    多态是继封装、继承之后,面向对象的第三大特性。 多态是出现在继承或者实现关系中的 。 多态体现的格式 : 多态的前提 :有继承关系,子类对象是可以赋值给父类类型的变量。例如Animal是一个动物类型,而Cat是一个猫类型。Cat继承了Animal,Cat对象也是Animal类型,自然可

    2024年02月12日
    浏览(67)
  • Educoder/头歌JAVA——JAVA面向对象:封装、继承和多态的综合练习

    目录 第1关:封装、继承和多态进阶(一) 相关知识 面向对象思想 封装 继承 组合和继承 构造函数 super()和this() 编程要求 第2关:封装、继承和多态进阶(二) 相关知识 重写和重载 abstract(抽象类)和interface(接口) final static static的作用 多态 编程要求 第

    2024年02月04日
    浏览(55)
  • 【Java不看后悔系列】|面向对象编程|[继承、封装、多态全覆盖]

    🌈个人主页:  Aileen_0v0 🔥系列专栏: Java学习系列专栏 💫个人格言:\\\"没有罗马,那就自己创造罗马~\\\" (inheritance) 1.A child class inherits everything from its parent class. 2.A child class cannot inherit the constructors from its parent class . 子类 继承 的内容: 字段(成员变量): 子类会继承父类的字段

    2024年02月05日
    浏览(52)
  • 【Java SE语法篇】8.面向对象三大特征——封装、继承和多态

    📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 面向对象三大特性:封装、继承和多态。 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部

    2024年02月01日
    浏览(59)
  • Java面向对象——多态、Object类、instanceof关键字以及final关键字

    总之,多态是面向对象编程中一个非常重要的概念,通过它可以实现统一的接口来操作不同的对象,提高代码的可读性和可维护性。在实际编程中,多态性的使用可以使代码更加灵活和扩展性更强。方法重写是实现多态的基础。 重写如下所示 关于hashCode方法的重写: 重写t

    2024年02月12日
    浏览(69)
  • c、c++、java、python、js对比【面向对象、过程;解释、编译语言;封装、继承、多态】

    目录 内存管理、适用 区别 C 手动内存管理:C语言没有内置的安全检查机制,容易出现内存泄漏、缓冲区溢出等安全问题。 适用于系统级编程 C++ 手动内存管理:C++需要程序员手动管理内存,包括分配和释放内存,这可能导致内存泄漏和指针错误。 适用于游戏引擎和系统级编

    2024年02月08日
    浏览(76)
  • 【Java基础教程】(十四)面向对象篇 · 第八讲:多态性详解——向上及向下转型、关键字 final与 instanceof的作用~

    掌握final 的主要作用及使用; 掌握对象多态性的概念以及对象转型的操作; 掌握instanceof 的主要作用及使用; 在Java 中 final称为终结器,在Java 里面可以使用 final定义类、方法和属性,用于表示不可变性 。 final 类:当一个类被声明为 final 时,意味着该类不能被

    2024年02月16日
    浏览(52)
  • 面向对象详解,面向对象的三大特征:封装、继承、多态

    一、面向对象与面向过程 面向对象编程 (Object-Oriented Programming,简称OOP)和 面向过程编程 (Procedural Programming,简称PP)是两种不同的 编程范式 。 面向对象编程强调把问题分解成对象,通过封装、继承和多态等机制,来处理对象之间的关系 。每个对象都可以独立地处理自

    2024年02月21日
    浏览(53)
  • 【JavaSE】面向对象之多态

    通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。 必须要满足如下几个条件,缺一不可: 必须在 继承 体系下 子类必须要对父类中方法进行 重写 通过父类的引用调用重写的方法 定义测试类TestAnimal.java 编译器在编译代码时

    2024年02月11日
    浏览(38)
  • 面向对象的多态

    7. 面向对象特征三:多态性 概念: 多态是面向对象程序设计(OOP)的一个重要特征,指同一个实体同时具有多种形式, 女朋友养宠物 王者荣耀英雄 7.1 多态的形式和体现 7.1.1 对象的多态性 多态性,是面向对象中最重要的概念, 在 Java 中如何体现的:对象的多态性:父类的

    2024年02月08日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包