抽象类与抽象方法和接口的学习及应用

抽象方法

抽象方法分类

抽象方法存在两者情况下,分别是抽象类接口

 

抽象类中的抽象方法的修饰符

修饰符只有public、protected两种,不写默认时为public;

 抽象类中的抽象方法

必须用abstract修饰(因为抽象类中可以有普通方法),只有方法头,没有方法体。例如:

public abstract class Test {
    public abstract void methodA();
    abstract void methodB();
 }

接口中方法的修饰符

 接口中的抽象方法默认有public abstract 修饰,所以修饰符只能是public 

接口中的抽象方法

可以不用abstract修饰,只有方法头,没有方法体。例如:

public interface Show1 {
    public abstract void methodA();
    abstract void methodB();
    void methodC();
}

抽象方法中不能使用的修饰符

  • static(静态的)
  • final(最终的)
  • native(本地方法)
  • synchronized(同步的)
  • protected(受保护的)
  • private(私有的)

 

  原因分析

  • static、final修饰方法不能被重写
  • private修饰的方法不能被访问
  • protected修饰的方法只能被同包访问,使接口失去了面向接口编程的初衷
  • 抽象方法需要被重写
  • synchronized对方法的具体实现细节有要求,抽象方法不考虑方法的实现

抽象类的特点

  1. 拥有抽象方法的类一定是抽象类
  2. 抽象可以有普通方法
  3. 抽象类不可以直接创建对象(防止抽象方法被调用,抽象方法被调用没有意义)
    抽象类中可以没有抽象方法(其目的是使该类不能被实例化,但方法可交由子类实现)。

接口的特点

  1. 接口的属性必须是常量,即初始化时就必须赋值
  2. 接口的方法必须是抽象方法
  3. 接口中的方法均为公共访问的方法
  4. 接口中无法定义普通的成员变量

使用接口的好处

  1. 解决多继承的弊端
  2. 接口的出现避免了单继承的局限性
  3. 多个接口之间可以使用extends进行继承
  4. 接口的出现降低了耦合性

接口和抽象类的区别与联系

  • 接口只能做方法的声明,抽象类可以做方法的声明,也可以做方法的实现。
  • 接口里定义的变量只能是公共的静态常量,抽象类中定义的变量是普通变量。
  • 接口是设计的结果,抽象类是重构的结果。
  • 抽象类里可以没有抽象方法。
  • 如果一个类里有抽象方法,那么该类只能是抽象类。
  • 抽象方法要被实现,所以不能是静态的,也不能是私有的。
  • 接口可以继承接口,并可多继承接口,但类只能单继承。(很重要)
  • 接口中的常量:有固定的修饰符public static final(不能用private和protected修饰/本质上都是static的而且是final类型的,不管加不加static修饰)。
  • 接口中的抽象方法:有固定的修饰符public abstract 。
  • 抽象类可以有 main 方法,接口没有 main 方法。
  • 抽象类的访问速度比接口要快,接口是稍微有点慢,因为它需要时间去寻找在类中实现的方法。
  • 抽象类和接口都是用来抽象具体的对象的,但是接口的抽象级别更高。

关于接口与抽象类的使用场景

  1. 优先选用接口,尽量少用抽象类
  2. 需要定义子类的行为,又要为子类提供共性功能时才选用抽象类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值