使用抽象类来实现接口

  1. 创建接口类
package cn.anzhongwei.lean.demo.abstractImplementInterface;

import java.math.BigDecimal;

/**
 * 接口中定义3个方法
 */
public interface InterfaceA {
    int a();
    String b();
    BigDecimal c();
}
  1. 创建抽象类
package cn.anzhongwei.lean.demo.abstractImplementInterface;

/**
 * 抽象中去实现两个方法,只有c()没有在抽象类中实现,留给最后类去实现c
 *
 */
public abstract class AbstractB implements InterfaceA{
    @Override
    public int a() {
        return 1;
    }

    @Override
    public String b() {
        return "Hello World!";
    }

}
  1. 创建实现类
package cn.anzhongwei.lean.demo.abstractImplementInterface;

import java.math.BigDecimal;

/**
 * 由类来实现抽象中未实现得方法, 这样得好处是可以将抽象当成通用得实现,每个最终得实现只去实现差异即可,
 * 既有通用得又有灵活的方法
 */
public class ClassC extends AbstractB{
    @Override
    public BigDecimal c() {
        return new BigDecimal(20);
    }
}
  1. 测试类
package cn.anzhongwei.lean.demo.abstractImplementInterface;

public class TestMain {
    public static void main(String[] args) {
        InterfaceA interfaceA1 = new ClassC();
        System.out.println(interfaceA1.a()); // 1
        System.out.println(interfaceA1.b()); // Hello World!
        System.out.println(interfaceA1.c()); // 20


        AbstractB abstractB2 = new ClassC();
        System.out.println(abstractB2.a()); // 1
        System.out.println(abstractB2.b()); // Hello World!
        System.out.println(abstractB2.c()); // 20

        ClassC classc3 = new ClassC();
        System.out.println(classc3.a()); // 1
        System.out.println(classc3.b()); // Hello World!
        System.out.println(classc3.c()); // 20
    }
}