抽象类与抽象方法和接口

抽象方法

抽象方法分类

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

抽象类中的抽象方法

必须用abstract修饰,只有方法头,没有方法体。
修饰符只有public、protected两种,不写默认时为public
例如:

public abstract class Test {
    public abstract void a();
    abstract void b();
 }
接口中的抽象方法

可不用abstract修饰,只有方法头,没有方法体。(接口中的抽象方法默认有public abstract 修饰,所以修饰符只能是public )
例如:

public interface Show1 {
    public abstract void a();
    abstract void b();
    void c();
}


抽象方法的修饰符

抽象方法的修饰符只有public、protected两种,不写默认时为public

抽象方法不能使用的修饰词(面试题)
  • static(静态的)
  • final(最终的)
  • native(本地方法)
  • synchronized(同步的)
  • protected(受保护的)
  • private(私有的)
public interface Show1 {
    public abstract void a();//编译正确,完整写法
    abstract void b();//编译正确,默认有public
    void c();//编译正确,默认有public abstract
    
    public abstract static void f1(); //编译时错误,抽象方法不能是静态的

    final abstract void f2(); //编译时错误,抽象方法不能是final的

    public abstract native void f3();  //编译时错误,抽象方法不能是本地方法

    public abstract synchronized void f4();  //编译时错误,抽象方法不能是同步的

    protected abstract void f5();  //编译时错误,接口的抽象方法不能用protected修饰,抽象类可以

    private abstract void f6();  //编译时错误,抽象方法不能用private修饰

}

原因解析:

  • 抽象方法需要被重写
    • static、final修饰方法不能被重写
    • private修饰的方法不能被访问
    • protected修饰的方法只能被同包访问,使接口失去了面向接口编程的初衷
  • native修饰的方法和抽象方法实现方式冲突,native修饰的方法的实现交由本地操作系统实现,抽象方法的实现交由子类
  • synchronized对方法的具体实现细节有要求,抽象方法不考虑方法的实现

抽象类

什么是抽象类
  • 用abstract修饰的类就是抽象类
抽象类的定义格式
abstract class 类名{
    
}
抽象类的特点
  1. 拥有抽象方法的类一定是抽象类
  2. 抽象可以有普通方法
  3. 抽象类不可以直接创建对象(防止抽象方法被调用,抽象方法被调用没有意义)
    抽象类中可以没有抽象方法(其目的是使该类不能被实例化,但方法可交由子类实现)。
接口
什么是接口
  1. 接口是功能的集合,是一个比抽象类更加抽象的类,接口也是一种数据类型.
  2. 接口里面只描述做么些事情,并没有具体的实现
  3. 具体的实现由子类完成,将功能的定义与实现分离
  4. 世间万物均有接口
接口的要求
  1. 定义接口必须要用interface
  2. 接口的属性必须是常量,即初始化时就必须赋值
  3. 接口的方法必须是抽象方法
  4. 接口中的方法均为公共访问的方法
  5. 接口中无法定义普通的成员变量
  6. 接口的实现使用implements
public interface 接口名{
        //属性的定义
       public static final 数据类型 常量名 = 值;
       // 抽象方法
       public abstract viod 方法名();
        
    }
    
使用接口的好处
  1. 解决多继承的弊端
  2. 接口的出现避免了单继承的局限性
  3. 多个接口之间可以使用extends进行继承
  4. 接口的出现降低了耦合性

接口与抽象类的区别
  1. 抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法
  2. 一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
  3. 抽象类是这个事物中应该具备的内容, 继承体系是一种
  4. 接口是这个事物中的额外内容,继承体系是一种
接口与抽象类的使用场景
  1. 优先选用接口,尽量少用抽象类
  2. 需要定义子类的行为,又要为子类提供共性功能时才选用抽象类
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值