阅读集合框架的源码的时候,发现AbstractConllection继承自Collection,我不太明白为什么使用抽象类实现接口,但是经过我查阅资料,然后自己又写了个demo,基本弄明白这么写的好处了,而且,我感觉,这就是抽象工厂模式。
好处就是,假设接口定义了10多个方法,但是好多方法的实现都是固定不变的,唯独有那么一两个需要实现类写出单独的逻辑,这种情况就很恶心,如果直接实现这个接口,好多方法就得复制一遍,造成代码冗余。所以,我们先使用一个抽象类实现这个接口。我们需要注意,抽象类可以实现接口的所有方法,也可以一个都不实现。接下来看我们的demo
Trainee接口有四个方法,sing(),jump(),rap(),platBasketball().但是我只想实现platBasketball().
上代码
package com.study.basicJava.abstractClass;
public interface Trainee {
void sing();
void jump();
void rap();
void playBasketball();
}
接着,使用抽象类继承接口
package com.study.basicJava.abstractClass;
public abstract class AbstractTrainee implements Trainee {
public void sing(){
System.out.println("唱,");
}
public void jump(){
System.out.println("跳,");
}
public void rap() {
System.out.println("rap,");
}
public abstract void playBasketball();
}
接着,是我自己的普通实现类
package com.study.basicJava.abstractClass;
public class Cxk extends AbstractTrainee {
@Override
public void playBasketball() {
System.out.println("我是NBA**,喜欢打篮球");
}
}
然后,看demo
package com.study.basicJava.abstractClass;
public class Demo01 {
public static void main(String[] args) {
AbstractTrainee trainee = new Cxk();
System.out.print("我喜欢");
trainee.sing();
trainee.jump();
trainee.rap();
trainee.playBasketball();
}
}
程序运行结果:
溜了溜了。。害怕律师函警告