接口和抽象类(设计角度来分析)

1.抽象类和接口的语法特性

抽象类不允许被实例化,只能被继承.它可以包含属性和方法.方法既可以包含代码的实现,也可以不包含代码的实现.不包含代码的实现叫做抽象方法.接口不能包含属性,只能声明方法,方法不能包含代码实现.类实现接口的时候,必须实现接口中声明的所有方法.

2.抽象类和接口存在的意义

抽象类是对 成员变量和方法的抽象,是一种is-a关系,是为了解决代码复用问题.接口仅仅是对方法的抽象,是一种has-a的关系,表示具有一组行为特性,是为了解决解耦问题,隔离接口和具体的实现,提高diamante的扩展性.

3,抽象类和接口的应用场景和区别

什么时候该用抽象类?设么时候该用接口?实际上,判断的标准很简单.如果表示一种is-a 的关系,并且是为了解决代码的复用问题,我们就用抽象类;如果要表示一样has-a关系,并且是为了解决抽象而非代码复用问题,我们就用接口.

如果让我聊聊接口和抽象类,我会这么聊:定义,区别(是什么),存在意义(从哪来),应用(到哪去)

1.定义:

抽象类:不允许实例化,只能被继承;可包含属性和方法,包含抽象方法;子类继承抽象类必须重写抽象方法

接口:不允许实例化,只能被实现;不包含属性和普通方法,包含抽象方法,静态方法,default方法,类实现接口时,必须实现抽象方法.

2.意义:

抽象类:解决复用问题,适合于is-a关系.

接口:解决抽象问题,适合has-a关系.

3应用:.....

 

抽象类使用例子:

代码复用(三个具有相同性质的类直接继承抽象类获取他的抽象定义方法,例如本科专科  抽象类为学生,使用的时候不需要创建多个对象)

抽象类的访问修饰符 为protected  同包下使用

//定义一个动物抽象类  里面有一个eat的方法和doInit抽象方法

//实现这个Animal的类必须实现doInit方法 调用eat方法的话直接在使用的地方eat();

abstract class Animal{  
    public String eat(String food){
        return food+":is food";
    }
   abstract void doInit() ;
}

顺便写个枚举:

enum Test{
    ASD1("1","one"),
    ASD2("2","two"),
    ASD3("3","three");

    private String key;
    private String value;
    private Test(String key,String value){
        this.key = key;
        this.value = value;
    }

    public String getKey() {
        return key;
    }

    public String getValue() {
        return value;
    }//根据key值得到他的value值
public static String getValueByCode(String code){
    for (Test ele : values()) {
        if(ele.getKey().equals(code)) return ele.getValue();
    }
    return null;
}

Test.getValueByCode("1") // one

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值