Java中抽象类、接口

Java中抽象类、接口定义及区别

抽象是面向对象编程的一大特征,在Java中通过"接口"和“抽象类”来体现。

  • 一、抽象类
  • 用“abstract”关键字修饰的类就是抽象类,如果一个类中含有抽象方法,则这个类就是抽象类。抽象方法必须用关键字“abstract”修饰。因为抽象类中方法没有方法体(具体实现),所以抽象类不能创建对象。
public abstract class Strategy {
    public abstract void fun();
}
  • 包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,和普通类一样,同样可以拥有成员变量和普通的成员方法。抽象类和普通类的区别:
    抽象方法必须是public或者protected(因为如果是private,则不能被子类继承,子类无法实现该方法)缺省情况下默认为public。
    抽象类不能用来创建对象。
    如果一个类继承于一个抽象类,子类必须实现父类的抽象方法,如果子类没有实现父类的抽象方法,则子类必须被abstract修饰。
    - 二、接口
    接口用“interface”修饰,指提供别人调用的方法或者函数。是对行为的抽象。
public interface Strategy {
    public static final int a = 1;
    
    public void fun();
}

接口中可以包含 变量和方法。接口中的变量会被隐式的指定为public static final 变量,即为常量;方法会被隐式的指定为public abstract方法且只能是 public abstract方法,否则编译报错。

public interface Strategy {
    //静态方法只能被接口直接调用
    public static void method1(){
        System.out.println(">>>method1");
    }
    
    //默认方法只能被实现类的对象调用
    public default void method2(){
        System.out.println(">>>method2");
    }
}

注意:非抽象类实现一个接口必须实现接口中的所有方法,抽象类可以不实现接口中的方法。

三、抽象类和接口的区别
抽象类可以提供成员方法的实现细节,接口中只能存在public abstarct方法;
抽象类中的成员变量可以是各种类型的,接口中的成员变量只能是public static final类型的;
抽象类中的方法可以被public、protected、default修饰,接口只能被public修饰;
接口中不能含有静态代码块,从JDK1.8可以包含静态方法,抽象类可以有;
一个类只能继承一个抽象类,而一个类可以实现多个接口;
子类使用extends关键字来继承抽象类,接口子类使用implements来实现接口;
抽象类可以有构造器;接口不可以有构造器;
抽象类可以继承一个类和实现多个接口,接口只可以继承一个或多个其他接口;
抽象类比接口速度快,接口稍微慢因为它需要时间去寻找在类中实现的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值