Java中抽象类与接口的区别

相同点

  1. 都不能实例化
  2. 都可以定义抽象方法
  3. 都可以定义成员方法,接口中成员方法要用default修饰(JDK 8后)
  4. 都可以定义静态方法,但接口中的静态方法只能通过接口访问,无法通过实现类访问

不同点

  1. 继承:抽象类只能继承自一个抽象类,接口可以extends多个接口
  2. 代码块:抽象类中可以定义构造/静态代码块,接口中不能
  3. 成员变量:抽象类中可以定义普通成员变量;接口中定义的变量是默认用public static final修饰的(无论有没有显示指定),且必须初始化
  4. 方法权限:抽象类中的变量和方法可以用任意权限符修饰,接口中的的变量和方法默认为public
  5. 被继承:每一个类只能继承一个抽象类,但可以实现多个接口
  6. 抽象区别:最大的区别还是抽象意义上的区别。从抽象的角度来说,抽象类一般为一个父类 表示一个类别的基础。而接口通常表示功能的拓展,或者一类对象的实现规范,比如lock接口

案例对比

/**
 * 抽象类测试
 */
public abstract class AbstractTest extends Abtract1 {
	//不同点:抽象类只能继承自一个抽象类,接口可以extends多个接口

    //不同点:抽象类中可以定义普通成员变量
    private int a;

    //不同点:抽象类中可以定义构造/静态代码块
    static {
        System.out.println("我被加载了");
    }
    {System.out.println("构造子类对象啦"); }

    //可以定义抽象方法,可用public和protected修饰
    protected abstract void hello();

    //可以定义成员方法和静态方法
    private void hello2(String s) {
        System.out.println(s);
    }
    public static void hello3(String s) {
        System.out.println("hello3:" + s);
    }
}
/**
 * 接口测试
 */
public interface InterfaceTest extends Interface1, Interface2 {
    //不同点:抽象类只能继承自一个抽象类,接口可以extends多个接口

    //不同点:接口中定义的变量是默认用public static final修饰的(无论有没有显示指定),且必须初始化
    public static final int a = 1;
    int b = 2;


    //可以定义抽象方法,但接口的所有方法默认为public
    public abstract void hello();
    public void hello1();


    //可以定义成员方法,但要用default修饰
    default public void hello2(String s) {
        hello3("hello2:" + s);
    }

    //可以定义静态方法,但是只能通过InterfaceTest访问,无法通过实现类访问
    public static void hello3(String s) {
        System.out.println("hello3:" + s);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值