iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JAVA 面向对象之多态的知识点有哪些
  • 728
分享到

JAVA 面向对象之多态的知识点有哪些

2023-07-02 09:07:49 728人浏览 八月长安
摘要

本篇内容介绍了“JAVA 面向对象之多态的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 概念多态是面向对象程序设计(OOP

本篇内容介绍了“JAVA 面向对象之多态的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

JAVA 面向对象之多态的知识点有哪些

1. 概念

多态是面向对象程序设计(OOP)的一个重要特征,指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。

可以把不同的子类对象都当作父类来看,进而屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,统一调用标准。

比如,你的女盆友让你买点水果回来,不管买回来的是苹果还是西瓜,只要是水果就行,这个就是生活中多态的体现

再比如,小猫、小狗、小猪我们可以把他们都归纳成小动物,每种小动物都需要吃东西,所以我们可以统一设置他们都必须吃,但是每种小动物的习性不一样,那这个就可以设置成小动物自己特有的功能,多态对象只能调用父类中定义子类中重写的功能,并不能调用子类的特有功能,这样就实现了代码的统一

2 . 特点

  1. 多态的前提1:是继承

  2. 多态的前提2:要有方法的重写

  3. 父类引用指向子类对象,如:Animal a = new Cat();

  4. 多态中,编译看左边,运行看右边
    JAVA 面向对象之多态的知识点有哪些

3. 练习:多态入门案例

创建包: cn.tedu.oop
创建类: TestDemo.java

package cn.tedu.oop2;public class TestDemo {    public static void main(String[] args) {        //6.创建“纯纯的”对象用于测试        Animal a = new Animal();        Cat c = new Cat();        Dog d = new Dog();        a.eat();//小动物Animal吃啥都行~调用的是父类自己的功能        c.eat();//小猫爱吃小鱼干~调用的是子类重写后的功能        d.eat();//小狗爱吃肉骨头~调用的是子类重写后的功能                //a.jump();//报错,Animal类里并没有这个方法        //a.run();//报错,Animal类里并没有这个方法        c.jump();//小猫Cat跳的老高啦~,子类可以调用自己的功能        d.run();//小狗Dog跑的老快啦~,子类可以调用自己的功能        //7.创建多态对象进行测试                Animal a2 = new Cat();//Cat类对象的地址值交给父类型变量a2来保存        Animal a3 = new Dog();//Dog类对象的地址值交给父类型变量a3来保存        //8.测试多态对象                a2.eat();//小猫爱吃小鱼干~,多态对象使用的是父类的定义,子类的方法体    }}//1.创建父类class Animal{    //3.创建父类的普通方法    public void eat(){        System.out.println("小动物Animal吃啥都行~");    }}//2.1创建子类1class Cat extends Animal{    //4.1添加重写的方法    public void eat(){        System.out.println("小猫爱吃小鱼干~");    }    //5.1添加子类的特有功能    public void jump(){        System.out.println("小猫Cat跳的老高啦~");    }}//2.2创建子类2class Dog extends Animal{    //4.2添加重写的方法    @Override    public void eat(){        System.out.println("小狗爱吃肉骨头~");    }    //5.2添加子类的特有功能    public void run(){        System.out.println("小狗Dog跑的老快啦~");    }}

4. 多态的好处

  1. 多态可以让我们不用关心某个对象到底具体是什么类型,就可以使用该对象的某些方法

  2. 提高了程序的可扩展性和可维护性

5. 多态的使用

前提:多态对象把自己看做是父类类型

  1. 成员变量: 使用的是父类的

  2. 成员方法: 由于存在重写现象,所以使用的是子类的

  3. 静态成员: 随着类的加载而加载,谁调用就返回谁的

6. 练习:多态成员使用测试

创建包: cn.tedu.oop
创建类: TestDemo2.java

package cn.tedu.oop2;public class TestDemo2 {    public static void main(String[] args) {        //7.创建纯纯的子类对象        Dog2 d = new Dog2();        System.out.println(d.sum);//20,子类自己的属性        d.eat();//小狗爱吃肉包子,子类自己的方法        //8.创建多态对象                        Animal2 a = new Dog2();                System.out.println(a.sum);//10                a.eat();//小狗爱吃肉包子                a.play();//没有提示,玩啥都行~        Animal2.play();    }}//1.创建父类class Animal2{    //3.创建父类的成员变量    int sum = 10;    //4.创建父类的普通方法    public void eat(){        System.out.println("吃啥都行~");    }    //9.1定义父类的静态方法play    public static void play(){        System.out.println("玩啥都行~");    }}//2.创建子类class Dog2 extends Animal2{    //5.定义子类的成员变量    int sum = 20;    //6.重写父类的方法    @Override    public void eat(){        System.out.println("小狗爱吃肉包子");    }    //9.2创建子类的静态方法play    //@Override        public static void play(){        System.out.println("小狗喜欢玩皮球~");    }}

7 拓展

7.1 设计汽车综合案例

创建包: cn.tedu.oopexec
创建类: DesignCar.java

package cn.tedu.oop2;public class DesignCar {    public static void main(String[] args) {        //9.创建一个纯纯的父类对象进行测试        Car c = new Car();        System.out.println(c.getColor());//null        c.start();        c.stop();        //c.swim();//报错,父类对象不可以调用子类的特有功能        //10.创建纯纯的子类对象做测试        BMW b = new BMW();        System.out.println(b.color);//五彩斑斓的黑        System.out.println(b.getColor());//null        b.start();//都让开,我的车要起飞啦~        b.stop();//唉呀妈呀熄火了~        //11.创建多态对象进行测试        Car c2 = new TSL();        //System.out.println(c2.color);        System.out.println(c2.getColor());        c2.stop();        c2.start();        //c2.swim();    }}//1.通过分析,抽象形成一个汽车类class Car{    //2.定义并封装汽车类的属性--成员变量    private String brand;//品牌    private String color;//颜色    private int id;//编号    private double price;//价格    //3.定义功能    public void start(){        System.out.println("我的小车车启动啦~");    }    public void stop(){        System.out.println("唉呀妈呀熄火了~");    }    public String getBrand() {        return brand;    }    public void setBrand(String brand) {        this.brand = brand;    }    public String getColor() {        return color;    }    public void setColor(String color) {        this.color = color;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }}//4.创建子类class BMW extends Car{    String color = "五彩斑斓的黑";    //5.重写父类的方法    @Override    public void start(){        System.out.println("都让开,我的车要起飞啦~");    }}//6.创建子类2class TSL extends Car{    //7.重写父类的方法    @Override    public void stop(){        System.out.println("唉呀妈,怎么停不下来呢");    }    //8.添加子类的特有功能    public void swim(){        System.out.println("没想到吧,我还是个潜水艇");    }}

7.2 多态为了统一调用标准

package cn.tedu.oop2;public class TestFruit {    public static void main(String[] args) {        Fruit f = new Fruit();        Apple a = new Apple();        Orange o = new Orange();        get(f);        get(a);        get(o);    }    //只需要创建一个方法,就可以执行截然不同的效果    //忽略子类对象的差异统一看作父类类型    public static void get(Fruit f){        f.clean();    }}class Fruit{    public void clean(){        System.out.println("水果要洗洗再吃");    }}class Apple extends Fruit{    @Override    public void clean(){        System.out.println("苹果需要削皮");    }}class Orange extends Fruit{    @Override    public void clean(){        System.out.println("橙子需要剥皮");    }}

7.3 静态变量和实例变量的区别

在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

7.4 向上转型和向下转型

在JAVA中,继承是一个重要的特征,通过extends关键字,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展。
那么在这个过程中就存在着多态的应用。存在着两种转型方式,分别是:向上转型和向下转型。
向上转型:可以把不同的子类对象都当作父类来看,进而屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,统一调用标准。
比如:父类Parent,子类Child
父类的引用指向子类对象:Parent p=new Child();
说明:向上转型时,子类对象当成父类对象,只能调用父类的功能,如果子类重写了父类中声明过的方法,方法体执行的就是子类重过后的功能。但是此时对象是把自己看做是父类类型的,所以其他资源使用的还是父类型的。
比如:花木兰替父从军,大家都把花木兰看做她爸,但是实际从军的是花木兰,而且,花木兰只能做她爸能做的事,在军营里是不可以化妆的。

向下转型(较少):子类的引用的指向子类对象,过程中必须要采取到强制转型。这个是之前向上造型过的子类对象仍然想执行子类的特有功能,所以需要重新恢复成子类对象
Parent p = new Child();//向上转型,此时,p是Parent类型
Child c = (Child)p;//此时,把Parent类型的p转成小类型Child
其实,相当于创建了一个子类对象一样,可以用父类的,也可以用自己的
说明:向下转型时,是为了方便使用子类的特殊方法,也就是说当子类方法做了功能拓展,就可以直接使用子类功能。
比如:花木兰打仗结束,就不需要再看做是她爸了,就可以”对镜贴花黄”了

“JAVA 面向对象之多态的知识点有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: JAVA 面向对象之多态的知识点有哪些

本文链接: https://www.lsjlt.com/news/340961.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JAVA 面向对象之多态的知识点有哪些
    本篇内容介绍了“JAVA 面向对象之多态的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 概念多态是面向对象程序设计(OOP...
    99+
    2023-07-02
  • Python面向对象知识点有哪些
    今天就跟大家聊聊有关Python面向对象知识点有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。类: 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性...
    99+
    2023-06-17
  • java数组和面向对象的知识点有哪些
    这篇文章主要介绍“java数组和面向对象的知识点有哪些”,在日常操作中,相信很多人在java数组和面向对象的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java...
    99+
    2024-04-02
  • javascript面向对象编程的知识点有哪些
    这篇文章主要介绍了javascript面向对象编程的知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇javascript面向对象编程的知识点有哪些文章都会有所收获,下面我们一起来看看吧。函数的定义和使...
    99+
    2023-06-29
  • Java对象的知识点有哪些
    这篇文章主要讲解了“Java对象的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java对象的知识点有哪些”吧!问题的复杂性直接取决于抽象的类型和质量,同一个问题,如果抽象的方法...
    99+
    2023-06-03
  • Java多态知识点有哪些
    本篇内容主要讲解“Java多态知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多态知识点有哪些”吧!将某个对象的引用视为其基类对象的引用的做法被称作“向上转型”(upcasti...
    99+
    2023-06-03
  • C#中面向对象的相关知识点有哪些
    本篇内容介绍了“C#中面向对象的相关知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!switch和字典前文提到过,有个游戏里面有个...
    99+
    2023-07-05
  • Java面向对象基础知识之封装,继承,多态和抽象
    目录一、封装二、继承三、多态四、抽象总结一、封装 封装:是面向对象方法的重要原则,就是把对象的属性和行为(数据)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节,就是把不想告诉或...
    99+
    2024-04-02
  • Java面向对象基础知识之枚举
    目录一、枚举的定义二、枚举的声明三、枚举的转换四、枚举的方法五、标志枚举(二进制枚举)总结一、枚举的定义 枚举是一组命名整型常量。枚举类型是使用enum关键字声明的。 C# 枚举是值...
    99+
    2024-04-02
  • python 面向对象之多态
    多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。那么,多态的...
    99+
    2023-01-30
    面向对象 多态 python
  • Java 面向对象 之 多态实例2
    转载于 : http://www.verejava.com/id=16992846385655 public class Polymorphism3 {public static&...
    99+
    2023-06-02
  • Java全面分析面向对象之多态
    目录多态的理解向上转型向上转型的三种形式动态绑定和静态绑定方法的重写进一步认识和理解多态多态的优点多态的理解 什么是多态呢??从字面理解就是多种形态,也就是不同类实例化出来的对象调用...
    99+
    2024-04-02
  • JavaScrpt的面向对象知识点整理
    这篇文章主要介绍“JavaScrpt的面向对象知识点整理”,在日常操作中,相信很多人在JavaScrpt的面向对象知识点整理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ja...
    99+
    2024-04-02
  • Python面向对象编程最容易忽视的知识点有哪些
    这篇文章主要介绍“Python面向对象编程最容易忽视的知识点有哪些”,在日常操作中,相信很多人在Python面向对象编程最容易忽视的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python面向对...
    99+
    2023-06-02
  • java面向对象面试题的考点有哪些
    小编给大家分享一下java面向对象面试题的考点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java有哪些集合类Java中的集合主要分为四类:1、List列...
    99+
    2023-06-14
  • Java面向对象之多态的用法示例
    小编给大家分享一下Java面向对象之多态的用法示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!public class Polymorphi...
    99+
    2023-06-02
  • Java面向对象之多态的示例分析
    这篇文章主要介绍Java面向对象之多态的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!public class Polymorphism {public static&...
    99+
    2023-06-02
  • Java面向对象之多态实例分析
    这篇文章主要介绍“Java面向对象之多态实例分析”,在日常操作中,相信很多人在Java面向对象之多态实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java面向对象之多态实例分析”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • Java面向对象之如何实现多态
    这篇文章主要介绍了Java面向对象之如何实现多态,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。转载于 : http://www.verejava.com/id=16...
    99+
    2023-06-02
  • Java常见知识点汇总(③)——面向对象基础
    面向对象三要素:封装、继承、多态①. 封装:封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项,或者叫接口。②. 继承:继承基类的方法,并做出自己的扩展;声明某个子类兼容于某基类(或者说,接口上完全兼容于基类),外部调用者可无需关...
    99+
    2023-06-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作