抽象类和接口的使用关系

1、如果一个父类中的某个方法,所有的子类都有不同的实现,那么该方法就应该定义成抽象方法,所以该方法就是抽象类

2、如果是针对于一种功能(一种类额外增加的特殊功能),而且这个功能和类本身的定义没有什么关系,可以被不同的类使用,那么这个功能可以定义到接口中,再用这个类去实现。

例如:

public abstract class Dog{
    // 吼叫   抽象方法 
    // 吃饭   抽象方法 
}

public interface JiDu{
    // 缉毒 抽象方法
}

public class JiDuDog extends Dog implements JiDu{
    // 重写吼叫,吃饭方法
    // 实现缉毒的方法 ----  缉毒方式
}


缉毒猪,缉毒猫,缉毒候....
//定义缉毒接口 缉毒的词组(anti-Narcotics)比较长,在此使用拼音替代
interface JiDu{
    //缉毒
    public abstract void jiDu();
}
//定义犬科,存放共性功能
abstract class Dog{
    //吃饭
    public abstract void eat();
    //吼叫
    public abstract void roar();
}
//缉毒犬属于犬科一种,让其继承犬科,获取的犬科的特性,
//由于缉毒犬具有缉毒功能,那么它只要实现缉毒接口即可,这样即保证缉毒犬具备犬科的特性,也拥有了缉毒的功能
class JiDuQuan extends Dog implements JiDu{
    public void jiDu() {
    }
    void eat() {
    }
    void roar() {
    }
}

//缉毒猪
class JiDuZhu implements JiDu{
    public void jiDu() {
    }
}

分析:

由于犬分为很多种类,他们吼叫和吃饭的方式不一样,在描述的时候不能具体化,也就是吼叫和吃饭的行为不能明确。当描述行为时,行为的具体动作不能明确,这时,可以将这个行为写为抽象行为,那么这个类也就是抽象类。

可是有的犬还有其他额外功能,而这个功能并不在这个事物的体系中 , 例如 : 缉毒犬。缉毒的这个功能有好多种动物都有 , 例如 : 缉毒猪 , 缉毒鼠。我们可以将这个额外功能定义接口中 ,让缉毒犬继承犬且实现缉毒接口 , 这样缉毒犬既具备犬科自身特点也有缉毒功能。

  • 额外的功能---> 在接口中定义,让实现类实现

  • 共性的功能---> 在父类中定义,让子类继承

总结:

  • 额外的功能---> 在接口中定义,让实现类实现

    • 如果可以确定的通用功能,使用默认方法

    • 如果不能确定的功能,使用抽象方法

  • 共性的功能---> 在父类中定义,让子类继承

    • 如果可以确定的通用功能,使用默认方法

    • 如果不能确定的功能,使用抽象方法

posted @ 2020-09-08 20:36  化蛹  阅读(97)  评论(0编辑  收藏  举报