ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

2021-10-6 Java学习(接口)

2021-10-06 21:58:17  阅读:128  来源: 互联网

标签:salary 10 Comparable Java name 接口 EmployeeInterface 2021 public


文章目录

一、接口概念

对希望符合这个接口的类的一组需求

eg.Comparable接口的代码

public interface Comparable
{
    int compareTo(Object other);
}

任何实现Comparable接口的类都要包含compareTo方法

  • 接口中的所有方法都自动是public方法,接口中声明方法时,不必提供关键字public。 实现接口时,必须把方法声明为public
  • 接口绝不会有实例字段 但可以包含常量 总是public static final
  • Java8之前,接口中绝对不会实现方法
  • 可以声明接口变量 Comparable x;
  • 接口变量必须引用实现了这个接口的类对象 x=new Employee(…)
  • instanceof可以用于检查一个对象是否实现了某个特定的接口 obj instanceof Comparable
public interface Moveable {
    void move(double x,double y);
    double SPEED=95;
}
//接口中的字段总是public static final

二、类实现接口

步骤:

  1. 让类声明为实现给定的接口 implements
  2. 对接口中的所有方法提供定义

eg. 如果希望Arrays类的sort方法对Employee对象数组进行排序,Employee类就必须实现Comparable接口
class Employee implements Comparable

  public int compareTo(Object o) {
        Employee other=(Employee) o;
        return Double.compare(salary,other.salary);
    }
public class EmployeeInterface implements Comparable<EmployeeInterface>{
    private String name;
    private double salary;

    public EmployeeInterface(String name,double salary)
    {
        this.name=name;
        this.salary=salary;
    }

    public String getName() {
        return name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

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

    @Override
    public int compareTo(EmployeeInterface o) {
        return Double.compare(this.salary,o.salary);
    }
}

import java.lang.reflect.Array;
import java.util.Arrays;

public class EmployeeSortTest {
    public static void main(String[] args) {
        EmployeeInterface[] staff=new EmployeeInterface[3];
        staff[0]=new EmployeeInterface("Harry Hacker",35000);
        staff[1]=new EmployeeInterface("Carl Cracker",75000);
        staff[2]=new EmployeeInterface("qaq",100);

        Arrays.sort(staff); //排序 一定要实现接口Comparable

        for(EmployeeInterface e:staff)
        {
            System.out.println("name="+e.getName()+" salary="+e.getSalary());
        }
    }
}

//结果:
//name=qaq salary=100.0
//name=Harry Hacker salary=35000.0
//name=Carl Cracker salary=75000.0

三、接口与抽象类

抽象类的问题:每个类只能扩展一个类

每个类可以实现多个接口

C++支持多重继承,但Java不支持

四、默认方法

使用default关键字 可以为接口方法提供一个默认实现

    default int compareTo(T other)
    {
        return 0;
    }

eg. Iterator接口

解决默认方法冲突:
先在一个接口中将一个方法定义为默认方法,又在超类或另一个接口中定义同样的方法,what happened?

  1. 超类优先
  2. 接口冲突

五、设计模式:回调 (callback)

在这种模式中,可以指定某个特定事件发生时应该采取的动作。

Java:向定时器传入某个类的对象,然后,定时器调用这个对象的方法。由于对象可以携带一些附加信息,所以传递一个对象比传递一个函数要灵活得多。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.time.Instant;
import javax.swing.*;

public class TimerTest {
    public static void main(String[] args) {
        TimePrinter listener=new TimePrinter();//创建监听器对象
        Timer timer=new Timer(1000,listener); //这里传递listener这个对象
        timer.start();

        JOptionPane.showMessageDialog(null,"Quit program?");
        System.exit(0);


    }
}

class TimePrinter implements ActionListener
{
    @Override
    public void actionPerformed(ActionEvent event) {
        System.out.println("At the tone,the time is "+ Instant.ofEpochMilli(event.getWhen()));
        Toolkit.getDefaultToolkit().beep();
    }
}

标签:salary,10,Comparable,Java,name,接口,EmployeeInterface,2021,public
来源: https://blog.csdn.net/qq_39679772/article/details/120628385

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有