Java面向对象之多态

目录
  • 一、前言
  • 二、什么是多态?
  • 三、多态的实现条件
  • 四、多态的访问特点
    • 1.我们建一个service包放Animal类
    • 2.再servic包下建一个impl包,包下放Cat类
    • 3.我们在建一个controller包,在里面建一个动物测试类
    • 4.弄完之后我们程序一运行
      • 4.1为什么两个有区别呢?
  • 五、多态的优点和缺点?
  • 六、为什么要分开建包

一、前言

前面我们了解和学习了继承的使用,现在我们来学习三大面向对象之一的多态。

多态使java面向对象丰富起来,所以学好多态十分重要。

二、什么是多态?

这个问题其实是显然的,从字面上看,也是多种状态,其实没错,多态就是在

不同情况表现出来的不同状况,叫多态。

比方说我们可以说,🍉是水果,也可以说,🍉是🍉 ((华强买🍉🤭)

是动物,也可以说,🐂是🐂(有人可能会问这是什么🐂🐎)

💸这里西瓜和牛有两种不同状态,这个就是多态。

三、多态的实现条件

  • 🌤①有(继承/实现)关系
  • 🌤②有方法重写
  • 🌤③有(父类/接口)引用指向(子类/实现)对象

解读

  • 💸①有(继承/实现)关系(说明这里有子类父类或者接口的实现)
  • 💸② 有方法的重写(重写抽象方法,或者重写父类中的方法)
  • 💸 ③有(父类/接口)引用指向(子类/实现)对象(说明有父类/接口 对象名= new 子类/实现 )

四、多态的访问特点

  • 🐟成员方法:编译看左边,执行看右边
  • 🐟成员变量:编译看左边,执行看左边

解读:①所谓编译看左边,就是在语法问题上,看new的左边(父类或者接口)

有没有此方法或者变量, 如果有则编译通过,反之则不通过

② 执行就是最终结果看,比如,在方法中执行时看右边就是看new的右边,

就是说 对象调用的时候,子类和父类都有此方法时,以子类中的方法为结果。

接口我们这篇未涉及到,所以这次我们用继承的方式类实现多态。

1.我们建一个service包放Animal类

package service;

public class Animal {
    public String name="动物";
    public void eat(){
        System.out.println("动物吃东西");
    }
    public void sleep(){
        System.out.println("动物要💤");
    }
}

2.再servic包下建一个impl包,包下放Cat类

因为我们要继承Animal类,而Animal在与之不再 同一个包所以需要导包(导包就是

告诉程序我要用的这个在哪里)

package service.impl;

import service.Animal;//导包

public class Cat extends Animal {
    public String name="猫";
    @Override
    public void eat() {//重写父类的方法
        System.out.println("🐱吃🐟");
    }
    public void play(){
        System.out.println("🐱玩毛球");
    }
}

3.我们在建一个controller包,在里面建一个动物测试类

import service.Animal;//导包
import service.impl.Cat;

public class AnimalController {
    public static void main(String[] args) {
           //多态创建对象
        Animal a=new Cat();//父类引用指子类对象
        a.eat();
        a.sleep();
        System.out.println("名字:"+a.name);
    }
}

4.弄完之后我们程序一运行

如图:

看结果,可以知道,方法的编译看做左边,执行看右边,成员的编译看做左边,

执行看左边也就是,在方法中,以子类方法为主,在变量上,以父类的变量为主。

当父类有该方法,而子类没有该方法时,此时,结果时父类的方法。

4.1为什么两个有区别呢?

其实主要的原因时方法有重写,而成员变量则没重写(变量不能重写)

五、多态的优点和缺点?

  •  🗡多态的优点:是提高了扩展性,子类可以在父类的基础上进行扩展。
  •  🗡 多态的缺点:就是不能访问子类的中的成员变量和成员方法。

解决方法:后期涉及

其实只要通过继承,实现时,子类所含有的方法是最多的,此时我们通过子类

创建对象,就可以访问所有成员(非子类的私有成员除外)

如图:

import service.Animal;
import service.impl.Cat;

public class AnimalController {
    public static void main(String[] args) {

        Cat c=new Cat();//通过子类创建对象
        c.eat();
        c.sleep();
        c.play();
        System.out.println("名字:"+c.name);
    }
}

六、为什么要分开建包

🗡有人不解,在同一个包下建就不用导包了,就没那么麻烦了,确实这话一点问题

都没有,但是我们要养成这种开建包的好习惯,以便于在代码很多的时候,便于

排查错误。因为写代码向来都是写时一时爽,找bug时满脸苦。为了防止这种情况

我们要养成分开建包的好习惯。

到此这篇关于Java面向对象之多态的文章就介绍到这了,更多相关Java面向对象 多态内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详细理解JAVA面向对象的封装,继承,多态,抽象

    目录 类和对象的使用(面向对象思想落地的实现): 子类对象实例化的全过程 1.从结果上看:(继承性) 2.从过程上来看: 1.封装性 2.继承性 继承性的好处: 3.多态性 虚拟方法调用 4.抽象性 1.抽象类的特点: 2.天生的父类:抽象类 3.抽象方法 总结 创建类的对象 = 类的实例化 = 实例化类 类和对象的使用(面向对象思想落地的实现): 1.创建类,设计类的成员 2.创建类的对象 3.通过"对象.属性"或"对象.方法"调用对象的结构 如果创建了一个类的多

  • Java面向对象程序设计多态性示例

    本文实例讲述了Java面向对象程序设计多态性.分享给大家供大家参考,具体如下: 多态:具有表现多种形态的能力的特征(同一个实现接口,使用不同的实例而执行不同的操作) 实现多态的优点:为了方便统一调用! 实现多态的三种方式! 1. 子类到父类的转换: 例: Dog dog=new Dog("欧欧","雪纳瑞"); dog.eat(); Pet pet=new Dog("欧欧","雪纳瑞");//子类到父类的转换 pet.eat(

  • Java基础之面向对象机制(多态、继承)底层实现

    一.Java的前世 为什么会产生Java?Java的特点是什么? 从C语言开始讲,C语言是一种结构化语言,模块化编程,便于程序的调试,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件.其缺点就是封装性弱,程序的安全性上不是很好.C语言的异常处理一般使用setjmp()与longjmp(),在捕获到异常时进行跳转:或者使用abort()和exit()两个函数,强行终止程序的运

  • Java面向对象三大特性及多态解析

    大家好,本文将会给大家带来Java多态. 以上就是本次学习的6大任务.我们依次来看. 1 Object类 Object类是所有Java类的根基类. 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类. class Person{ } 等价于 class Person extends Object{ } 1.对象的实例化过程 实例化一个类是从最顶级的超类开始实例化的, 是一层一层的包裹结构. "先父类后子类,先静态后成员". ⑴toString方法 toSt

  • Java面向对象程序设计:继承,多态用法实例分析

    本文实例讲述了Java面向对象程序设计:继承,多态用法.分享给大家供大家参考,具体如下: 本文内容: 继承 多态 首发时期:2018-03-23 继承: 介绍: 如果多个类中存在相同的属性和行为,可以将这些内容抽取到单独一个类中,那么多个类(子类)无需再定义这些属性和行为,只要继承那个类(父类/超类/基类)即可.[比如,泰迪狗类也是狗类,狗的属性,泰迪狗也应该是有的,那么泰迪狗类在定义的时候就不必要添加那些与狗类重复的属性了,而是直接继承狗类即可.在多个狗类的子类(泰迪狗,二哈,柴犬)的时候,直

  • 详解Java多态对象的类型转换与动态绑定

    Java多态对象的类型转换 这里所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象.当对不存在继承关系的对象进行强制类型转换时,java 运行时将抛出 java.lang.ClassCastException 异常. 在继承链中,我们将子类向父类转换称为"向上转型",将父类向子类转换称为"向下转型". 很多时候,我们会将变量定义为父类的类型,却引用子类的对象,这个过程就是向上转型.程序运行时通过动态绑定来实现对子类方法的调用,也就是多态性. 然而有些时候

  • Java多态和实现接口的类的对象赋值给接口引用的方法(推荐)

    接口的灵活性就在于"规定一个类必须做什么,而不管你如何做". 我们可以定义一个接口类型的引用变量来引用实现接口的类的实例,当这个引用调用方法时,它会根据实际引用的类的实例来判断具体调用哪个方法,这和上述的超类对象引用访问子类对象的机制相似. //定义接口InterA interface InterA { void fun(); } //实现接口InterA的类B class B implements InterA { public void fun() { System.out.pri

  • java对象类型转换和多态性(实例讲解)

    对象类型转换 分为向上转型和向下转型(强制对象转型). 向上转型是子对象向父对象转型的过程,例如猫类转换为动物类:向下转型是强制转型实现的,是父对象强制转换为子对象. 这和基础数据类型的转换是类似的,byte在需要时会自动转换为int(向上转型),int可以强制转型为byte(向下转型). 对于对象转型来说, 向上转型后子对象独有的成员将不可访问 . 意思是,在需要一只动物时,可以把猫当作一只动物传递,因为猫继承自动物,猫具有动物的所有属性.但向上转型后,猫不再是猫,而是被当作动物看待,它自己独

  • Java面向对象基础之多态性,抽象类和接口

    一.多态性 多态是指一个对象可以拥有多种不同的形态,继承是实现多态的基础. 1.1 引用多态和方法多态 引用多态:父类引用可以指向本类的对象,也可以指向子类的对象 方法多态: 1.创建本类对象时,调用的方法为本类方法: 2.创建子类对象时,调用的方法为子类重写或继承的方法. 首先建立父类Animal,包含一个eat()方法,如下代码所示: public class Animal { public void eat(){ System.out.println("动物可以吃东西"); }

  • Java面向对象之多态

    目录 一.前言 二.什么是多态? 三.多态的实现条件 四.多态的访问特点 1.我们建一个service包放Animal类 2.再servic包下建一个impl包,包下放Cat类 3.我们在建一个controller包,在里面建一个动物测试类 4.弄完之后我们程序一运行 4.1为什么两个有区别呢? 五.多态的优点和缺点? 六.为什么要分开建包 一.前言 前面我们了解和学习了继承的使用,现在我们来学习三大面向对象之一的多态. 多态使java面向对象丰富起来,所以学好多态十分重要. 二.什么是多态?

  • 新手小白入门必学JAVA面向对象之多态

    目录 1. 概念 2 . 特点 3. 练习:多态入门案例 4. 多态的好处 5. 多态的使用 6. 练习:多态成员使用测试 7 拓展 7.1 设计汽车综合案例 7.2 多态为了统一调用标准 7.3 静态变量和实例变量的区别 7.4 向上转型和向下转型 总结 1. 概念 多态是面向对象程序设计(OOP)的一个重要特征,指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态. 可以把不同的子类对象都当作父类来看,进而屏蔽不同子类对象之间的差异,写出通用的代码,

  • 详解Java面向对象之多态的原理与实现

    目录 何为多态 代码实现 多态理解 何为多态 定义: 多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式.系统在运行时(而非编译时),能够根据其类型确定调用哪个重载的成员函数的能力,称为多态性. 特点: (1)多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态. (2)多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话. (3)对不同类的对象

  • Java面向对象编程(封装/继承/多态)实例解析

    本文主要介绍了面向对象的三大特征实例解析,下面看看具体内容. 封装 封装一个Teacher和Student类 package com.hz.test; public class Teacher { private String name; private String majorDirection; private String teachCourse; private int teachAge; public Teacher() { super(); } public Teacher(Stri

  • java面向对象继承与多态介绍

    目录 一.概述 二.继承 2.1 继承的概述 2.2 继承机制 2.3 类中属性,方法的继承与覆盖 2.4 super 关键字 三. 多态 总结 一.概述 面向对象程序设计的三大原则是封装性,继承性和多态性.继承性是子类自动共享父类的数据和方法的机制,它是由类的派生功能体现的.继承具有传递性,使得一个类可以继承另一个类的属性和方法,这样通过抽象出共同的属性和方法组件新的类,便于代码的重用.而多态是指不同类型的对象接收相同的消息时产生不同的行为,这里的消息主要是对类成员函数的调用,而不同的行为是指

  • Java全面分析面向对象之多态

    目录 多态的理解 向上转型 向上转型的三种形式 动态绑定和静态绑定 方法的重写 进一步认识和理解多态 多态的优点 多态的理解 什么是多态呢??从字面理解就是多种形态,也就是不同类实例化出来的对象调用同一种方法,也可以理解为不同类的对象经过同一种行为产生的状态是不同的,这就是多态. 要想理解多态,我们必须要了解向上转型和重写这两个重点然后在来深刻理解多态这一概念,等看完向上转型与重写再来看多态的概念,你就会豁然开朗,一下就通透了不少.因为多态的条件就是向上转型,重写以及继承. 向上转型 首先多态的

  • java 面向对象面试集锦

    java  面向对象:这里整理了面向对象的基础知识,帮助大家学习理解,希望能帮助到大家,这里是 根据公司面试资料整理的相关知识: Overload和Override的区别.Overloaded的方法是否可以改变返回值的类型? Overload是重载的意思,Override是覆盖的意思,也就是重写.重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同). 重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子

  • Java 继承与多态的深入理解

    Java 继承与多态的深入理解 1.  什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类更具体.父类具有更一般的特征和行为,而子类除了具有父类的特征和行为,还具有一些自己特殊的特征和行为. 在继承关系中.父类和子类需要满足is-a的关系.子类是父类. 表示父类和子类的术语:父类和子类.超类和子类.基类和派生类,他们表示的是同一个意思. 2.  为什么需要继承?什么时候应该

  • 浅谈java面向对象(类,封装,this,构造方法)

    无论面向对象还是面向过程, 这俩都是解决问题的思路而已, 只是角度不同. 面向过程: 强调解决问题的每一个步骤都亲力亲为,每一个细节都自己手动实现. 面向对象: 使用特定功能对象去解决特定的问题, 每一个细节不需要关注,只需要创建对应的对象即可. 面向对象是基于面向过程的 类和对象及他们的关系 类: 具有相同特征和行为(功能)的事物的统称 , 是一个抽象概念 对象: 这类事物中某个确定的个体 类和对象的关系 一个类可以创建多个对象 , 类是对象的抽象, 对象是类的实例. 描述一个事物---->

随机推荐