首页 > 编程语言 >JAVA - instanceof 模式匹配

JAVA - instanceof 模式匹配

时间:2023-10-01 22:00:45浏览次数:40  
标签:instanceof salary JAVA double getSalary Manager public 模式匹配 staff

父类:

package com.demo;

import java.time.LocalDate;

public class Employee {

    private String name;
    private double salary;
    private LocalDate hireDay;


    public Employee(String name, double salary, int year,int month, int day){
        this.name = name;
        this.salary = salary;
        this.hireDay = LocalDate.of(year, month,day);
    }

    public String getName() {
        return name;
    }

    public double getSalary() {
        return salary;
    }

    public LocalDate getHireDay() {
        return hireDay;
    }


    public void raiseSalary(double byPercent){
        double raise = salary * byPercent / 100;
        salary += raise;
    }
}

子类:

package com.demo;

public class Manager extends  Employee{

    private double bouns;

    public Manager(String name, double salary, int year, int month, int day) {
        super(name, salary, year, month, day);
        bouns = 0;
    }

    public double getSalary(){
        double salary = super.getSalary();
        return salary + bouns;
    }

    public void setBouns(double b){
        bouns = b;
    }
}

测试类:

package com.demo;

public class ManagerTest {

    public static void main(String[] args) {

        var boss = new Manager("Carl Craker", 80000,1987,12,15);
        boss.setBouns(5000);

        var staff  = new Employee[3]; // java 10 新特性:如果可以从变量的初始值推到出它们的类型,
                                      // 那么可以使用car关键字声明变量类,无须指定类型

        staff[0] = boss;
        staff[1] = new Employee("Harry Hacker", 50000,1989,10,1);
        staff[2] = new Employee("Tommy Tester", 40000,1990,3,15);


        if (staff[0] instanceof Manager){
            Manager boss2 = (Manager) staff[0];
            System.out.println(boss2.getSalary());
        }
    }
}

对于以下类型写法有些冗余,Manager 被提及了三次

if (staff[0] instanceof Manager){
    Manager boss2 = (Manager) staff[0];
    System.out.println(boss2.getSalary());
}

在Java16中,还有一种更简便的写法。可以直接在instanceof 测试中声明子类变量:

if (staff[0] instanceof Manager boss2){
    System.out.println(boss2.getSalary());
}


//还可以有其他类似的用法
if (staff[0] instanceof Manager m && m.getSalary() >10000){
    System.out.println(m.getSalary());
}

//比如 三元运算符的用法
double bouns =  staff[0] instanceof Manager m ? m.getSalary() : 0;

标签:instanceof,salary,JAVA,double,getSalary,Manager,public,模式匹配,staff
From: https://www.cnblogs.com/czzz/p/17739336.html

相关文章

  • javascript: Bubble Sort
     //SortingAlgorithmsintJavaScript/***fileSort.js*1.BubbleSort冒泡排序法*/functionBubbleSort(arry,nszie){vari,j,temp;varswapped;for(i=0;i<nszie-1;i++){swapped=false;for(j=0;j<n......
  • 无涯教程-JavaScript - WEBSERVICE函数
    描述WEBSERVICE函数从Internet或Intranet上的Web服务返回数据。语法WEBSERVICE(url)争论Argument描述Required/OptionalurlTheURLofthewebservice.RequiredNotes如果参数无法返回数据,则WEBSERVICE返回#VALUE!错误值。如果参数导致一个无效的字符串或包......
  • 无涯教程-JavaScript - ENCODEURL函数
    描述ENCODEURL函数返回URL编码的字符串。语法ENCODEURL(text)争论Argument描述Required/OptionalTextAstringtobeURLencoded.Required适用性Excel2013,Excel2016Example参考链接https://www.learnfk.com/javascript/advanced-excel-statistical-encode......
  • Java 21 新特性:Unnamed Classes and Instance Main Methods
    Java21引入了两个语言核心功能:未命名的Java类你说新的启动协议:该协议允许更简单地运行Java类,并且无需太多样板下面一起来看个例子。通常,我们初学Java的时候,都会写类似下面这样的HelloWorld程序:publicclassHelloWorld{publicstaticvoidmain(String[]args){......
  • 无涯教程-JavaScript - UPPER函数
    描述UPPER函数将文本转换为大写。语法UPPER(text)争论Argument描述Required/OptionalText您要转换为大写的文本。文本可以是引用或文本字符串。Required适用性Excel2007,Excel2010,Excel2013,Excel2016Example参考链接https://www.learnfk.com/javascri......
  • 无涯教程-JavaScript - UNICODE函数
    描述UNICODE函数返回与文本的第一个字符相对应的数字(代码点)。语法UNICODE(text)争论Argument描述Required/OptionalTextTextisthecharacterforwhichyouwanttheUnicodevalue.RequiredNotes如果文本包含部分替代或无效的数据类型,则UNICODE返回#VALUE!......
  • Javascript之Object、Array
    Object.keys 对象的键转化为数组Object.values 对象的属性值转化为数组Object.assign 对象的合并 Array.from()伪数组对象的属性值转化为数组。类似Object.valuesArray.reduce 将数组的值减为单个值(从左到右)   ......
  • Mac安装Java开发工具包
    1.检查你是否安装了Java软件首先,检查你是否已安装Java开发工具包版本8或更高版本。要检查是否已安装JDK(以及安装的是哪个版本),打开终端窗口并输入:java-version,然后按Enter键。下面的示例显示了Java版本1.8.0_91--“1”后面就是版本号:如果已安装Java8或更高版......
  • Windows:安装 Java 开发工具包
    1.检查你是否已安装Java软件首先,检查你是否已安装Java开发工具包版本8或更高版本。要检查是否已安装JDK(以及安装的是哪个版本),打开命令提示符窗口并输入:java-version,然后按Enter键。下面的示例显示了Java版本1.8.0_92--“1”后面就是版本号。如果已安装Java8......
  • java 实现外观模式
    外观模式(FacadePattern)是一种结构型设计模式,它提供了一个简化的接口,用于访问一组相关的接口或子系统。外观模式的主要目的是隐藏复杂的系统结构,提供一个更简单的接口供客户端使用。以下是一个简单的Java示例,演示如何实现外观模式:首先,假设我们有一个音响系统,它包含了多个子系统,如音......