JAVA-多态

这篇具有很好参考价值的文章主要介绍了JAVA-多态。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章目录

1.多态的概念

2.多态的实现条件

3.重写

总结


一 . 多态的概念

什么是多态?  通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态


定义一个基类Animal和两个派生类cat,dog,派生类重写基类中的eat()方法

定义Test测试类,用来测试方法method执行的结果。

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        Cat cat = new Cat();
        method(dog);
        method(cat);
    }
    public static void method(Animal animal){
        // 子类的对象由父类接受,称之为向上转型,反之,则为向下转型
        animal.eat();
    }
}

class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃饭");
    }
}

class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃饭");
    }
}
class Animal{
    String name;
    int age;
    public void eat(){
        System.out.println("动物吃饭");
    }
}

代码执行结果

JAVA-多态

一个函数中,传入不同的对象,输出结果却不同,猫和狗在吃饭上有不同的表现形式,但却都是继承了

 Animal类,一个对象在不同条件下所表现出的不同形式,这便是多态! 

JAVA-多态


2.多态的实现条件

  • 必须在继承条件下
  • 子类必须对父类中要实现多态的方法进行重写
  • 通过父类的引用调用重写的方法(实现多态的方法中的参数是父类)

3.重写

重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程 进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

规则:

1.子类在重写父类的方法时,一般必须与父类方法原型一致: 返回值类型 方法名 (参数列表) 要完全一致

2.被重写的方法返回值类型可以不同,但是必须是具有父子关系的

3.访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方 法就不能声明为 protected

4.父类被static、private修饰的方法、构造方法都不能被重写。

5.重写的方法, 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验. 例如不小心 将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父类中没有 aet 方法, 就会编译报错, 提示无法 构成重写.

重写和重载的区别:

JAVA-多态

静态绑定:也称为前期绑定(早绑定),即在编译时,根据用户所传递实参类型就确定了具体调用那个方法。典型代表函数重载。

public class Test {
    public static void main(String[] args) {
        Animal animal = new Dog();
        System.out.println(animal.name);
        //调用成员变量:编译看左边,运行也看左边
        //编译看左边:javac编译代码的时候,会看左边的父类中有没有这个变量,如果有,编译成功,如果没有编译失败。
        //运行也看左边:java运行代码的时候,实际获取的就是左边父类中成员变量的值
    }
}

class Dog extends Animal{
    String name = "狗";
    int age = 2;

    @Override
    public void eat() {
        System.out.println("狗吃饭");
    }
}

class Cat extends Animal{
    String name = "猫";
    int age = 2;
    
    @Override
    public void eat() {
        System.out.println("猫吃饭");
    }
}
class Animal{
    String name = "动物";
    int age = 2;

    public void eat(){
        System.out.println("动物吃饭");
    }
}

成员变量便是属于静态绑定 

动态绑定:也称为后期绑定(晚绑定),即在编译时,不能确定方法的行为,需要等到程序运行时,才能够确定具体 调用那个类的方法。

public class Test {
    public static void main(String[] args) {
        Animal animal = new Dog();
        animal.eat();
        //调用成员方法:编译看左边,运行看右边
        //编译看左边:javac编译代码的时候,会看左边的父类中有没有这个方法,如果有,编译成功,如果没有编译失败。
        //运行看右边:java运行代码的时候,实际上运行的是子类中的方法
    }
}

class Dog extends Animal{
    String name = "狗";
    int age = 2;

    @Override
    public void eat() {
        System.out.println("狗吃饭");
    }
}

class Cat extends Animal{
    String name = "猫";
    int age = 2;

    @Override
    public void eat() {
        System.out.println("猫吃饭");
    }
}
class Animal{
    String name = "动物";
    int age = 2;

    public void eat(){
        System.out.println("动物吃饭");
    }
}

成员方法属于动态绑定


总结

以上便是多多态的相关内容了,望大家多多支持!文章来源地址https://www.toymoban.com/news/detail-444563.html

到了这里,关于JAVA-多态的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【Java 进阶篇】MySQL启动与关闭、目录结构以及 SQL 相关概念

    MySQL是一个常用的关系型数据库管理系统,通过启动和关闭MySQL服务,可以控制数据库的运行状态。本节将介绍如何在Windows和Linux系统上启动和关闭MySQL服务。 在Windows上启动和关闭MySQL服务 启动MySQL服务 在Windows上,MySQL服务可以通过以下步骤启动: 打开Windows服务管理器。您可

    2024年02月07日
    浏览(49)
  • Java反射调用jar包实现多态

    上一篇实现了反射调用jar包,但是没有实现多态,这次先给自己的jar包类抽象一个接口,然后实现类实现接口。最后调用放反射得到的对像转换成接口类型调用执行。 定义接口,指定包为ZLZJar 实现接口方法 生成jar包 生成jar包指定id和版本,引用要一致 把jar包拷贝到调用方工

    2024年02月07日
    浏览(39)
  • c#多线程—基础概念到“双色球”项目实现(附知识点目录、代码、视频)

    总结:视频中对于多线程讲的非常透彻,从线程基础概念—.net不同版本出现的线程方法—多线程常出现问题—双色球项目实践,每个知识点都有代码实操,受益匪浅。附上学习笔记和实操代码。 视频 线程:程序执行的最小单位,任何操作都是由线程完成的,使用同步时,资

    2024年02月11日
    浏览(59)
  • [设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式

    前言: 为什么之前写过Golang 版的设计模式,还在重新写 Java 版? 答:因为对于我而言,当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言,更适合用于学习设计模式。 为什么类图要附上uml 因为很多人学习有做笔记的习惯,如果单纯的只是放一张图片,那

    2024年01月21日
    浏览(44)
  • java中的线程不安全和实例解析,网络安全多态实现原理

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新网络安全全套学习资料》

    2024年04月27日
    浏览(44)
  • Linux 学习目录合集【文章索引】

    前言:本内容为笔者自学笔记内容。 本文中的操作环境:腾讯云服务器:CentOS 7.6 64bit 学习阶段规划: Linux 基本操作【基本命令、vim、makefile使用等】 Linux 系统【进程:概念、控制、通信;IO基础;多线程等】 Linux 网络【网络基础、套接字编程、IO高级等】 学习集: C++ 入门

    2024年02月07日
    浏览(52)
  • FlinkCDC 菜鸟教程-文章目录

    背景篇 环境篇  准备一台已经安装了 Docker 的 Linux 或者 MacOS 电脑。 准备教程所需要的组件 版本对应关系 安装 环境检查 工具篇 flink kibana 概念篇 Docker 介 绍 Docker Compose 介 绍 Kibana介 绍 实践篇 演示: Mysql CDC 导入 Elasticsearch 启动服务 准备数据 在 Flink SQL CLI 中使用 Flink DDL 创建

    2024年02月09日
    浏览(53)
  • WordPress主题开发 — 模版循环(条件判断、多个循环、新建查询和文章循环)

            循环是 WordPress 通过主题模板文件输出文章的默认机制 。在循环中,WordPress 遍历当前页面获取到的所有文章,然后使用主题中的模版标签将其格式化并输出。 我们可以用 WordPress 循环来做很多事情,例如: 在网站首页显示多个文章模块 在文章详情页面显示内容

    2024年02月13日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包