面向对象---多态(代码片段)

fbwa fbwa     2022-12-04     236

关键词:

一、什么是多态?

   同样的物质,在不同的条件下,所呈现出来状态是不同的。

//类名  对象名  = new   类名();
  Dog  d = new Dog();
  

  Penguin  p = new Penguin();

 

二、使用

    父类的引用指向子类的实例

 

     语法:1、父类名       父类引用  =new   子类名();

 

三、向上转型

    父类的引用指向子类对象,自动进行类型转换

   <父类型>  <引用变量名>=new <子类型>();

//语法
Pet  dog=new Dog();

四、向下转型

   将一个指向子类对象的父类引用赋给一个子类的引用,即:父类类型转换为子类类型,需要强制转换。

  <子类型> <引用变量名>=(<子类型>) <父类的引用变量>;

//语法
Dog dog=(Dog)pet

 

五、编写一个汽车租赁系统

  1、编写父类汽车类,抽象方法为计算租金。

//汽车类
public abstract class MotoVehicle 
    //车牌号   品牌  日租金
private  String no;
private   String brand;
private   int perRent;


//构造方法:车牌号   品牌  日租金

public MotoVehicle(String no, String brand, int perRent) 
    this.no = no;
    this.brand = brand;
    this.perRent = perRent;
                
//set/get方法
public String getNo() 
    return no;


public void setNo(String no) 
    this.no = no;



public String getBrand() 
    return brand;



public void setBrand(String brand) 
    this.brand = brand;


public int getPerRent() 
    return perRent;


public void setPerRent(int perRent) 
    this.perRent = perRent;





//抽象方法:计算租金
public abstract float calcRent(int days);

 2、子类:小轿车类

//轿车类
public  class Car extends MotoVehicle
    private String type;
    //构造方法:车牌号   品牌  日租金  类型
    public Car(String no, String brand, int perRent,String type) 
    super(no,brand,perRent);
    this.type=type;
    
    //set/get方法
    public String getType() 
        return type;
    

    public void setType(String type) 
        this.type = type;
    

    @Override
    public float calcRent(int days) 
        float price=this.getPerRent()*days;
        if(days>7&&days<=30)          //大于7天小于30天9折
            price*=0.9f;
        else if(days>30&&days<=150)
            price*=0.8f;
        else if(days>150)
            price*=0.7f;
        
        return price;
    
    

 3.子类:Bus类

public class bus extends MotoVehicle 
    //私有属性座位
private int seatCount;
//构造方法:车牌号   品牌  日租金  座位
public bus(String no, String brand, int perRent,int seatCount)
    super(no,brand,perRent);
    this.seatCount=seatCount;


//set/get方法
public int getSeatCount() 
    return seatCount;


public void setSeatCount(int seatCount) 
    this.seatCount = seatCount;

@Override
public float calcRent(int days) 
    float price=this.getPerRent()*days;
    if(days>3&&days<=7)
        price*=0.9f;
    else if(days>=7&&days<30)
        price*=0.8f;
    else if(days>=30&&days<=150)
        price*=0.7f;
    else if(days>=150)
        price*=0.6f;
    
    return price;


  4、汽车业务类

public class VehicleOperation 
    //汽车业务类
MotoVehicle []motoVehicle=new MotoVehicle[5];
//汽车数组
//初始化几个汽车信息
public void show()
    motoVehicle[0]=new Car("苏A6666","宝马",800,"520i");
    motoVehicle[1]=new Car("苏A1111","宝马",500,"x6");
    motoVehicle[2]=new Car("苏A2222","别克",600,"林荫大道");
    motoVehicle[3]=new Car("苏A8888","宝马",710,"GL8");
    motoVehicle[4]=new bus("苏A9999","金龙",800,24);


//父类类型作为返回值
//租车   
//参数   品牌   座位数   型号    
public MotoVehicle rentMontoVehicle(String brand,int seatCount,String type)
    MotoVehicle v= null;
    //循环是小汽车还是大巴车
    for(MotoVehicle motovehicle:motoVehicle)
        if( motovehicle instanceof Car)
            Car car=(Car) motovehicle;  //向下转型
            //轿车品牌和型号与用户想要的品牌信号吻合
            if(car.getBrand().equals(brand)&&car.getType().equals(type))
                v=car;
                break;
            
        else
            bus b=(bus)motovehicle;
            if(b.getBrand().equals(brand)&&b.getSeatCount()==seatCount)
                v=b;
                break;
            
            
        
    
    return v;
    

 5、测试类

//汽车租赁系统测试类
public class TestRent 
public static void main(String[] args) 
    Scanner input=new Scanner(System.in);
    
    System.out.println("*********欢迎来到汽车租赁公司!**********");
    System.out.print("请选择亲您需要租赁的车型:1、轿车  2、客车");
    int vehicleType=input.nextInt();
    //获取用户租赁汽车的三个条件;:品牌    座位数   型号
    String brand="";
    int seatCount=0;
    String type="";
    switch( vehicleType)
    case 1:
        System.out.print("请选择您要租赁的汽车品牌: 1、别克    2、宝马");
        int choose =input.nextInt();
        if(choose==1)
            brand="别克";
            System.out.print("请选择您需要租赁的类型:1、林荫大道   2、GL8");
            type=(input.nextInt()==1)?"林荫大道":"GL8";
        else
            
            brand="宝马";
            System.out.print("请选择您需要租赁的类型:1、x6   2、520i");
            type=(input.nextInt()==1)?"x6":"520i";
        
        break;
    case 2:
        System.out.println("请选择您要租赁的汽车品牌:1、金杯    2、金龙");
        brand =(input.nextInt()==1)?"金杯":"金龙";
        System.out.println("请选择需要租赁的座位数:");
        seatCount=(input.nextInt()==1)?16:34;
                break;
    
    
    VehicleOperation vehicleOper=new     VehicleOperation();
    vehicleOper.show();
    MotoVehicle m=vehicleOper.rentMontoVehicle(brand, seatCount, type);
    System.out.println("请输入您需要租赁的天数:");
    int days=input.nextInt();
    float price=m.calcRent(days);
    System.out.println("您的汽车车牌号为:"+m.getNo());
    System.out.println("您需要支付租赁费用:"+price+"元");
   

6、实现效果

技术图片

 

面向对象——多态(代码片段)

多态1.多态和多态性多态:指同一种事物的多种形态。比如水,可以是水蒸汽、雪、雨等多种形态。多态性:指的是可以在不考虑对象的类型的情况下而直接使用对象。(1).例子一s1="hello"s2="world"d1=500d2=20print(s1+s2)#helloworldprint(d1+d2)... 查看详情

面向对象多态(代码片段)

多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类... 查看详情

面向对象之多态(代码片段)

多态的概念多态指的是一类事物的多种形态,例如水有固态、液态、气态,动物有人、狗、猪,这是动物的不同形态。可能你会领悟,人狗猪不是继承于动物类吗?没错,多态在程序中的表现形式就是依赖于继承多态性那多态到... 查看详情

面向对象-通过代码分析多态(代码片段)

多态是面向对象的三大特性之一,我们今天重点来聊聊多态,并且将代码与多态的概念进行对应和映射。“多态”的概念:多态是指为不同数据类型的实体提供统一的接口,也就是同一操作作用于不同的对象,... 查看详情

面向对象---多态(代码片段)

一、什么是多态?  同样的物质,在不同的条件下,所呈现出来状态是不同的。//类名对象名=new类名();Dogd=newDog();Penguinp=newPenguin(); 二、使用  父类的引用指向子类的实例    语法:1、父类名&n... 查看详情

java面向对象三大特征之继承和多态(代码片段)

...转型多态代码案例总结前言  上一篇博客我们介绍了Java面向对象思想以及三大特征之一的封装。本文将介绍面向对象三大特征的剩下两个特征——继承和多态,我个人认为继承和多态是三个特征中比较重要且理解起来稍有... 查看详情

面向对象之多态与多态性(代码片段)

一、多态  1、定义:指的是一类事物的多种形态,如水有液体、气体和固体三种形态, 动物有人、猫、狗等存在形态。  2、示例:#!/usr/bin/envpython3#-*-coding:utf-8-*-importabcclassAnimal(metaclass=abc.ABCMeta):#同一类事物@abc.abstract... 查看详情

5_面向对象-中之面向对象的特征三:多态性(代码片段)

1.多态性的理解:可以理解为一个事物的多种形态。2.何为多态性:对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)举例:Personp=newMan();Objectobj=newDate();3.多态性的使用:虚拟方法调用  >有了对象... 查看详情

java面向对象之多态(代码片段)

...态的实现3.小结 1.多态的含义       多态,是Java面向对象的三大特性之一,使用之地特别广泛。那么什么是多态呢?多态是同一个行为具有多个不同表现形式或形态的能力。比如炒菜这个行为在不同厨师身上会产... 查看详情

java面向对象之多态(代码片段)

...态的实现3.小结 1.多态的含义       多态,是Java面向对象的三大特性之一,使用之地特别广泛。那么什么是多态呢?多态是同一个行为具有多个不同表现形式或形态的能力。比如炒菜这个行为在不同厨师身上会产... 查看详情

面向对象的三大特性之多态(代码片段)

#面向对象的三大特性之多态#多态由不同的类实例化得到的对象,调用同一个方法,执行的逻辑不同#多态的概念指出了对象如何通过他们的属性和动作来操作及访问,而不需要考虑他们具体的类#多态表明了动态(运行时)绑定... 查看详情

java基础面向对象三个特征:多态(代码片段)

一、多态的概述  多态:一个对象拥有多种形态    eg:小明是一个学生(学生形态),同时也是一个人(人类形态)  多态的格式与使用:父类引用指向子类对象    格式:父类名称对象名=new子类名称()    ... 查看详情

前端javascript设计模式前奏--面向对象-封装继承多态(代码片段)

JavaScript面向对象如图所示:1.什么是面向对象1.面向对象的概念2.面向对象的三要素:继承/封装/多态⭐️3.JS的应用举例4.面相对象的意义---数据结构化2.面向对象的概念:类+对象1.面向对象的概念:类+对象1.类(模板)/对象(实例)1.... 查看详情

python面向对象之多态(代码片段)

多态第一阶段:判断一个变量是否是某个类型可以用isinstance()判断classAnimal(object):defrun(self):print("Animalisrunning")classDog(Animal):defrun(self):print("Dogisrunning")classCat(Animal):defrun(self):print 查看详情

面向对象三大特性之多态与多态性(代码片段)

一、多态‘‘‘多态:同一事物的多种形态‘‘‘#文件的多种形态:classFile:defclick(self):passclassTextFile(File):defread(self):print(‘文本文件双击可以查看内容‘)classExeFile(File):defexe(self):print(‘可执行文件双击可以执行‘)file1=TextFile()file2... 查看详情

java中面向对象三大特性之——多态(代码片段)

多态的概述: 多态是继封装、继承之后,面向对象的第三大特性。生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如飞的动作,昆虫、鸟类和飞机,飞起来也是不一样的。可见,同一行为,通过不同的... 查看详情

面向对象三大特性(代码片段)

面向对象三大特性1.面向对象的三大特性:继承,封装,多态封装:将一堆代码或者数据等放到一个空间中,并且可以使用多态:同一个对象,多种形态.(python默认支持多态)封装:根据职责将属性和方法封装到一个抽象的类中继承:实现代码... 查看详情

java面试题详解一:面向对象三大特性(代码片段)

一,多态:1.面向对象四大基本特性:抽象,封装,继承,多态抽象,封装,继承是多态的基础。多态是抽象,封装,继承的表现。2.什么是多态不同类的对象对同一消息作出不同的响应叫做多态3.多态的作用简单来说:解藕。详... 查看详情