首页 > 编程语言 > 详细

【自学java笔记#第二十五天#】接口

时间:2020-03-30 21:18:17      阅读:54      评论:0      收藏:0      [点我收藏+]

选用教材:《Java核心技术卷一》

第六章 接口、lambda表达式与内部类

一、接口与类

1、相同点:

①都可以包含方法、常量及变量;

②都具有可扩展性;

2、不同点:

①类可以实例化,而接口绝无可能拥有实例;

②类中没有默认方法,而接口可以有默认方法;

3、接口与类的关系:

接口里包含的内容,是对希望符合该接口的类的一组需求。

我个人的理解是:有一些特殊的方法,比如Arrays类的Sort方法。它要求的参数类型是Comparable类的,所以传其他的参数进去,系统就会报错。Comparable接口的作用就是把任何一种类转换为符合Sort参数要求的对象,再调用这种方法。

例如:

public interface Comparable
{
   int compareTo(Object object);
   ....
}

接口Comparable要求用到它的类,必须拥有一个参数类型为Object,且返回整型的compareTo方法。

Java语法限制一个类只能有一个超类,但却能使用多个不同的接口。

二、学到的一些常用接口

1、Comparable接口;

2、Comparator接口;

3、Cloneable接口;

package clone;

public class CloneTest 
{
    public static void main(String[] args)
    throws CloneNotSupportedException
    {
        var original=new Employee("John Q. Public",50000);
        original.setHireDay(2000,1,1);
        Employee copy=original.clone();
        copy.raiseSalary(10);
        copy.setHireDay(2002,12,31);
        System.out.println("original="+original);
        System.out.println("copy="+copy);
    }
    

}
package clone;

import java.util.Date;
import java.util.GregorianCalendar;

public class Employee implements Cloneable 
{
    private String name;
    private double salary;
    private Date hireDay;
    
    public Employee(String name,double salary)
    {
        this.name=name;
        this.salary=salary;
        hireDay=new Date();//所有的实例字段都要写在构造器里
    }
    
    public Employee clone() throws CloneNotSupportedException
    {
        Employee cloned=(Employee) super.clone();//重载方法
        cloned.hireDay=(Date) hireDay.clone();//可协变的参数类型
        return cloned;
    }
    
    public void setHireDay(int year,int month,int day)
    {
        Date newHireDay=new GregorianCalendar(year,month-1,day).getTime();
        hireDay.setTime(newHireDay.getTime());
    }
    
    public void raiseSalary(double byPercent)
    {
        double raise=salary*byPercent/100;
        salary+=raise;
    }
    
    public String toString()
    {
        return "Employee[name="+name+",salary="+salary+",hireDay="+hireDay+"]";
    }

}

三、当出现命名冲突时的解决办法

1、超类与接口冲突

即超类与接口中拥有某个相同名称、相同参数类型的方法,那么系统会遵循“超类优先原则”,忽略掉接口的方法。

2、接口与接口冲突

当一个类使用的两个接口都具有同一默认方法时,该类需要重写这个方法。

3、特殊情况

一个类使用的某个接口中含有某个方法,但并未提供默认实现。那么系统会自动忽略掉这个方法。这种情况并不存在冲突,类可以选择实现它,或者干脆就不管这个接口。

 

【自学java笔记#第二十五天#】接口

原文:https://www.cnblogs.com/yizhinailu/p/12600749.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!