美文网首页Java
复习JavaSE 6.接口、lambda表达式与内部类

复习JavaSE 6.接口、lambda表达式与内部类

作者: 第二套广播体操 | 来源:发表于2019-02-28 22:29 被阅读0次

接口不是类 是对类的一组需求描述,为定义类的行为提供了灵活性
这些类要遵从接口描述的统一格式定义 任务由实现接口的类完成
接口不能包含实例域
可以在接口中提供方法,但是方法不能引用实例域

实现接口类 把方法声明为public
instanceof 可以检查一个对象是否实现一个接口
接口可以继承接口
类可以实现多接口 不可以实现多抽象类
实例 通过Arrays中的sort方法 按工资对员工进行排序
Arrays中的sort方法 默认方法会对对象进行比较排序 ·

if (a[i].compareTo(a[j]>0))
{
   //
}

所以需要在Employee方法中重写Comparable接口中compareTo方法 改变比较的方法

/**
 * @ClssName Employee
 * @Autor Yu
 * @Description TODO
 * @Date 2019/2/28 21:32
 * Version 1.0
 */
public class Employee implements Comparable<Employee> {
    private String name;
    private double salary;

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

    }
    public String getName() {
        return name;
    }

    public double getSalary() {
        return salary;
    }

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

    @Override
    public int compareTo(Employee o) {
        return Double.compare(this.salary,o.salary);
    }
}
public class EmployeeSortTest {
    public static void main(String[] args) {
        Employee[] staff=new Employee[3];
        staff[0]=new Employee("Carl",75000);
        staff[1]=new Employee("Harry",50000);
        staff[2]=new Employee("tony",40000);
        Arrays.sort(staff);

        for (Employee e:staff)
            System.out.println("name="+e.getName()+",salary="+e.getSalary());

    }
}

不按照字典排序 按照自己的需求排序
利用Compa'rator接口

/**
 * @ClssName EmployeeTest1
 * @Autor Yu
 * @Description TODO
 * @Date 2019/2/28 22:17
 * Version 1.0
 */
public class EmployeeTest1 {
    public static void main(String[] args) {
        Employee[] staff=new Employee[3];
        staff[0]=new Employee("Yus",75000);
        staff[1]=new Employee("Harry",50000);
        staff[2]=new Employee("tony",40000);
        Arrays.sort(staff, new ComparatorByName());

        for (Employee e:staff)
            System.out.println("name="+e.getName()+",salary="+e.getSalary());

    }
}
/**
 * @ClssName ComparatorByName
 * @Autor Yu
 * @Description TODO
 * @Date 2019/2/28 22:27
 * Version 1.0
 */
public class ComparatorByName implements Comparator<Employee> {

        @Override
        public int compare(Employee o1, Employee o2) {
            return o2.getName().length()-o1.getName().length();
        }

}

默认方法 :
可以为接口方法提供默认实现方法 用default修饰
伴随类往往实现了相应接口的部分方法
将方法实现默认方法 可以解决不必在新增方法后 实现类也需要实现该方法 也可以正常工作

超类优先: 如果超类中提供了具体方法 同名而且相同参数类型的默认方法会被忽略
接口冲突:如果一个超类提供了一个默认方法 另一个接口提供了一个同名而且参数类型相同的方法 必须覆盖这个方法解决
类优先:如果超类和接口中都有相同方法 接口方法会被忽略


设计模式 回调:
某个特定事件发生时应该采取的动作 类似于点击事件


内部类:
原因:
内部类可以访问类所在的作用域中的数据 包括私有数据
内部类可以对同一个包中的其他类隐藏起来
当想定义一个回调函数不想编写大量代码时,使用匿名内部类比较便捷

成员内部类
静态内部类 非静态内部类
外部域访问 Outer.this.age
内部域访问this.age

非静态:
内部类不可以使用静态方法 静态域和静态初始化块
非静态内部类先实例化外部再实例化内部
Outer.Inner inner=new Outer().new Inner();

public class OuterTest {
    public static void main(String[] args) {
        Outer.Inner inner=new Outer().new Inner();
        inner.Show();
    }
}
class Outer{
    private String name="于松江";
    class Inner{
        private String name="于大莎";
        public void Show(){
            System.out.println("HAHA  "+Outer.this.name);
        }
    }
}

静态类:
可以直接实例化内部类
Outer.Inner inner=new Outer.Inner();

相关文章

  • 复习JavaSE 6.接口、lambda表达式与内部类

    接口不是类 是对类的一组需求描述,为定义类的行为提供了灵活性这些类要遵从接口描述的统一格式定义 任务由实现接口的类...

  • Java 8新特性

    Lambda表达式与Functional接口 Lambda表达式 可以认为是一种特殊的匿名内部类lambda只能用...

  • Lambda表达式-03-02

    外部类实现线程接口: 内部类实现线程接口: 匿名内部类: jdk8的Lambda表达式:

  • 接口,lambda表达式和内部类

    接口,lambda表达式和内部类 接口 定义 接口特性 可以包含常量(public static final)方法...

  • Java 函数式编程技能清单

    首先,了解匿名内部类,函数式接口1、熟练使用Lambda表达式编程掌握Lambda表达式编写方法,方法引用,默认方...

  • 上周复盘2021.03.29

    1.每天跑步四公里完成。 2.复习了大章对象与类。 3.复习了大章继承 4.复习了大章接口,lambda表达式与内...

  • Lambda表达式

    Lambda表达式与函数式接口紧密相关,函数式接口介绍 Lambda表达式的基本语法 Java Lambda表达式...

  • JAVA8 新特性~~~~

    Lambda 表达式&函数式接口 Lambda表达式好像已经出现很久了好像大部分人还是比较倾向于使用内部类(老程序...

  • Java lambda表达式学习文档 冲~

    Java lambda表达式的基础知识包括:lambda表达式的定义、lambda与匱名内部类、变量捕获、函数式接...

  • Java8-Lambda 表达式入门

    只能应用于函数式接口,Lambda表达式可以认为是一种特殊的匿名内部类 Lambda 语法 参数说明: () :参...

网友评论

    本文标题:复习JavaSE 6.接口、lambda表达式与内部类

    本文链接:https://www.haomeiwen.com/subject/gthluqtx.html