20.java8

1.方法引用(method reference)

使用lambda表达式会创建匿名方法

方法引用通过方法的名字来指向一个方法

方法引用可以使语言的构造更紧凑,减少冗余代码

方法引用使用一对冒号::

  • 类构造器引用语法:classname:new或者classname::new,例如:ArrayList::new

  • 静态方法引用语法:classname::methodname,例如:Person::getAge

  • 特定类的对象的实例方法引用语法:classname:methodname

  • 特定对象的方法引用语法:instancename:methodname,例如System.out::println

public class Java8Test {
    public static void main(String[] args) {
        //类构造器引用 classname::new
        final Car car = Car.create(Car::new);
        final List<Car> cars = Arrays.asList(car);
        //静态方法引用
        cars.forEach(Car::collide);
        //类::实例方法名(特殊)
        cars.forEach(Car::repair);
        //对象的实例方法引用
        cars.forEach(car::follow);
        //System.out::println方法作为静态方法来引用
        cars.forEach(System.out::println);
    }
}

class Car {
    /**
     * 静态方法
     * @param supplier
     * @return
     */
    public static Car create(final Supplier<Car> supplier) {
        return supplier.get();
    }

    /**
     * 静态方法
     * @param car
     * @return
     */

    public static void collide(final Car car) {
        System.out.println("collide "+ car.toString());
    }

    /**
     * 有参实例方法
     * @param car
     */
    public void follow(final Car car) {
        System.out.println("follow "+car.toString());
    }

    /**
     * 无参实例方法
     */
    public void repair() {
        System.out.println("repair "+this.toString());
    }
}
为了创建三个Java源文件,分别用于计算矩形和梯形的面积,我们首先需要理解每个类的作用和结构。下面是一个简单的示例: 1. **Example4_1.java** - 这个文件将是主入口点,它将实例化其他两个类并调用它们的面积计算方法。 ```java // Example4_1.java public class Example4_1 { public static void main(String[] args) { // 创建矩形对象 Rect rectangle = new Rect(5, 7); System.out.println("Rectangle area: " + rectangle.calculateArea()); // 创建梯形对象 Ladder ladder = new Ladder(10, 20, 6); // 注意梯形类需要两个底边长度和一条斜边长度 System.out.println("Ladder area: " + ladder.calculateArea()); } } ``` 2. **Rect.java** - 定义矩形类,包含长和宽属性以及计算面积的方法。 ```java // Rect.java class Rect { private int length; private int width; public Rect(int length, int width) { this.length = length; this.width = width; } public int calculateArea() { return length * width; } } ``` 3. **Ladder.java** - 定义梯形类,通常梯形类会更复杂一些,因为它需要额外的信息(比如两条底边长度和高),并且可能有特定的公式来计算面积。 ```java // Ladder.java class Ladder extends Rect { // 继承自Rect类 private int height; // 梯形高度 public Ladder(int base1, int base2, int height) { super(base1, height); // 使用矩形构造函数初始化 this.height = base2; } @Override // 重写父类的calculateArea方法 public int calculateArea() { return (base1 + base2) * height / 2; } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值