• 抽象类和接口的使用关系


    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() {
        }
    }

    分析:

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

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

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

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

    总结:

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

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

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

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

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

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

  • 相关阅读:
    [LeetCode] 148. Sort List 解题思路
    [LeetCode] 21. Merge Two Sorted Lists 解题思路
    [LeetCode] 160. Intersection of Two Linked Lists 解题思路
    [LeetCode] 203. Remove Linked List Elements 解题思路
    是否是最美的6年
    Apache的Order Allow,Deny 详解
    apache 2.4 访问权限配置
    apache如何设置http自动跳转到https
    linux ssh_config和sshd_config配置文件
    mysql命令查询表的个数
  • 原文地址:https://www.cnblogs.com/YwhsR0129/p/13635178.html
Copyright © 2020-2023  润新知