首页 > 其他分享 >多态的应用(包含具体实例)

多态的应用(包含具体实例)

时间:2024-03-24 23:32:22浏览次数:27  
标签:包含 int price 多态 实例 比萨 public size

一、多态是什么?

1.什么是多态:

多态就是多种状态:同一个行为,不同的子类表现出来不同的形态。
多态指的就是同一个方法调用,然后由于对象不同会产生不同的行为。

2.多态的好处:

为了提高代码的扩展性,符合面向对象的设计原则:开闭原则。
开闭原则:指的就是扩展是 开放的,修改是关闭的。
注意:多态可以提高扩展性,但是扩展性没有达到最好,以后我们会学习 反射

3.多态的要素

(1)继承: Cat extends Animal ,Pig extends Animal, Dog extends Animal
(2)重写:子类对父类的方法shout()重写
(3)父类引用指向子类对象(父类做参数/返回值类型)

Pig p = new Pig();
Animal an = p;
将上面的代码合为一句话:
Animal an = new Pig();
=左侧:编译期的类型
=右侧:运行期的类型

二、具体实例

1.比萨制作

要求:编写程序实现比萨制作。需求说明编写程序,接收用户输入的信息,选择需要制作的比萨。可供选择的比萨有:培根比萨和海鲜比萨。

实现思路及关键代码
1)分析培根比萨和海鲜比萨
2)定义比萨类
a)属性:名称、价格、大小
b)方法:展示
3)定义培根比萨和海鲜比萨继承自比萨类
4)定义比萨工厂类,根据输入信息产生具体的比萨对象
程序运行结果如图所示
在这里插入图片描述
在这里插入图片描述

2.代码部分:

(1)比萨作为父类

ipackage info.duotai318.pizza;

public class Pizza {

    private String name;
    private int price;
    private int size;

    public Pizza(String name, int price, int size) {
        this.name = name;
        this.price = price;
        this.size = size;
    }
    public void show(){
        System.out.println("名称:"+name);
        System.out.println("价格:"+price);
        System.out.println("大小"+size);
    }


    public Pizza() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }



}

(2)培根比萨作为子类

package info.duotai318.pizza;

public class BaconPizza extends Pizza {

    private int number;

    @Override
    public void show() {
        super.show();
        System.out.println("培根克数:"+getNumber());
    }

    public BaconPizza(String name, int price, int size, int number) {
        super(name, price, size);
        this.number = number;
    }

    public BaconPizza() {
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }
}

(3)海鲜比萨作为子类

package info.duotai318.pizza;

public class SeafoodPizza extends Pizza {

    private String ingredients;//配料


    public SeafoodPizza(String name, int price, int size, String ingredients) {
        super(name, price, size);
        this.ingredients = ingredients;
    }

    public SeafoodPizza() {
    }

    @Override
    public void show() {
        super.show();
        System.out.println("配料:"+ingredients);
    }

    public String getIngredients() {
        return ingredients;
    }

    public void setIngredients(String ingredients) {
        this.ingredients = ingredients;
    }



}

(4)比萨加工厂作为另一条线,把父类比萨作为返回值返回

package info.duotai318.pizza;

import java.util.Scanner;

public class Pizzafactory {

    public Pizza make(){

        Pizza pizza;
        Scanner input=new Scanner(System.in);
        System.out.println("请选择要制作的披萨(1.培根披萨 2海鲜披萨)");
        if(input.nextInt()==1){
            System.out.println("请输入培根克数");
            int ks=input.nextInt();
            System.out.println("请输入披萨大小");
            int size=input.nextInt();
            System.out.println("请输入披萨价格");
            int price=input.nextInt();
            pizza=new BaconPizza("培根披萨",price,size,ks);
        }else{
            System.out.println("请输入配料信息");
            String info=input.next();
            System.out.println("请输入披萨大小");
            int size=input.nextInt();
            System.out.println("请输入披萨价格");
            int price=input.nextInt();
            pizza=new SeafoodPizza("海鲜披萨",price,size,info);
        }

        return pizza;
    }

}

(5)测试类代码部分,声明父类new子类,然后调用

package info.duotai318.pizza;

import java.util.Scanner;

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

      Pizzafactory pizzafactory=new Pizzafactory();

        //声明 父类 new 子类
     Pizza pizza= pizzafactory.make();
     pizza.show();

(6)运行结果:

在这里插入图片描述
在这里插入图片描述


总结

多态指的是方法的多态,而不是属性的多态。
多态:肯定是两条线;两条线一定有交点;多态体现在第二条业务线上

标签:包含,int,price,多态,实例,比萨,public,size
From: https://blog.csdn.net/qq_48854032/article/details/136822058

相关文章

  • 【阻抗建模、验证扫频法】光伏并网逆变器扫频与稳定性分析(包含锁相环电流环)(Simulink
    ......
  • flutter3-dylive仿抖音App实例|Flutter3+Getx实战短视频直播应用
    原创研发flutter3+getX+mediaKit跨平台仿抖音app短视频直播实战Flutter3-DouYin。flutter3_dylive使用最新跨平台技术flutter3.x+dart3+getx+get_storage+media_kit开发手机端仿抖音app小视频直播实战项目。实现了抖音全屏式上下滑动视频、左右滑动切换页面模块,直播间进场/礼物动......
  • Struts2的工作原理是什么?Struts2中的MVC模式包含哪些核心组件?在Struts2中如何实现转发
    Struts2的工作原理是什么?Struts2的工作原理主要基于MVC设计模式,它充当Web应用框架的控制器层(Controller),负责建立模型与视图之间的数据交互。具体来说,Struts2的工作流程如下:启动与加载:当Web应用启动时,服务器会加载web.xml配置文件。在这个过程中,StrutsPrepareAndExecuteFi......
  • 10个python爬虫入门实例
    10个python爬虫入门实例涉及主要知识点:web是如何交互的requests库的get、post函数的应用response对象的相关函数,属性python文件的打开,保存代码中给出了注释,并且可以直接运行哦如何安装requests库(安装好python的朋友可以直接参考,没有的,建议先装一哈python环境)windows用户,Linux......
  • Java中的继承、重载与重写:概念、区别与实例演示(day7)
    Java的继承、重载以及重写java的继承:java的重载java的重写:在这个例子中:Animal类是父类,它有一个makeSound方法和两个重载的eat方法。Dog类是子类,它继承了Animal类,并重写了makeSound方法,使其具有不同的行为。此外,Dog类还重载了eat方法,但这次重载的方法......
  • 在Linux中,如何查看内核版本?内核版本信息包含什么?
    在Linux中查看内核版本有多种方法,下面列举了几种常用且详细的命令:方法一:uname命令仅查看内核版本:uname-r这个命令会打印出当前系统运行的内核版本号,例如:4.15.0-72-generic。查看详细系统信息:uname-a这个命令会输出所有与内核相关的详细信息,包括内核名称、主机名、......
  • pinctrl使用实例
    不同半导体厂商的pinctrl设计均不同,这里以高通的pinctrl使用举例: dts修改://mtp-pinctrl.dtsileds_redon:leds_redon{mux{pins="gpio161";function="gpio";};config{......
  • JAVA高级面向对象二:多态下的类型转换问题
     packagecom.itheima.多态;publicclassTest{//多态好处publicstaticvoidmain(String[]args){////好处1:实现解耦合,右边对象可以随时切换,后续业务随即改变//Peoplep1=newTeacher();//p1.run();////好处2:可以使用父......
  • JAVA高级面向对象二:认识多态 多态的好处
    1.多态:在继承/实现情况下的一种现象,表现为对象多态(儿子,学生),行为多态(跑的快慢)方法编译看左边,运行看右边  变量编译看左边,运行看左边 packagecom.itheima.多态;publicclassTest{//对象多态,行为多态publicstaticvoidmain(String[]args){//1.对象......
  • .net core 实例教程(一)新建项目
    本文源码下载地址:http://www.80cxy.com/Blog/ResourceView?arId=202403191532545995NAAqJh系列教程地址:http://www.80cxy.com/Blog/ArticleView?arId=202403191517574161ay3s5V本实例教程将开发一个角色管理系统。主要包http://www.80cxy.com/Blog/ArticleView?arId=20240319151......