接口和抽象类有什么共同点和区别?20240928

接口和抽象类的共同点

实例化:接口和抽象类都不能直接实现,只能被实现(接口)或继承(抽象类)后才能创建具体的对象。

抽象方法:接口和抽象类都可以包含抽象方法。

抽象方法没有方法体,必须在子类后实现类中实现.

接口和抽象类的区别

设计目的:

接口主要用于对类的行为进行约束,你实现了某个接口就具有了对应的行为。

抽象类主要用于代码复用,强调的是所属关系。

继承和实现:一个类只能继承一个类(包括抽象类),因为Java不支持多继承。

但一个类可以实现多个接口,一个接口也可以继承多个其他接口。

成员变量:接口中的成员变量只能是也默认是public static final类型的,不能被修改且必须有初始值。

(没有初始值的原因是它是final,final都是没有默认值的)。

抽象类的成员变量可以有任何修饰符(private,protected,public),可以在子类中被重新定义或赋值。

(就是没啥限制)

方法:

Java8之前,接口中的方法默认是public abstract,也就是只能有方法声明。

自java8起,可以在接口中定义default(默认(显式))方法和static(静态)方法。

自Java9起,接口可以包含private方法。

抽象类可以包含抽象方法和非抽象方法。

抽象方法没有方法体,必须在子类中实现。

非抽象方法有具体实现,可以直接在抽象类中使用或子类中使用或重写。

在Java8及以上版本中,接口引入了新的方法类型:default方法,static方法和private方法。

这些方法让接口使用更加灵活。

Java8引入的default方法用于提供接口方法的默认实现,可以在实现类中被覆盖。

这样就可以在不修改实现类的情况下向现有接口添加新功能,从而增强接口的扩展性和向后兼容性。

public interface MyInterface(){
    default void defaultMethod(){
        System.out.println("This is a default method.");
    }
}

Java8引入的static方法无法再实现类中被覆盖,只能通过接口名直接调用(MyInterface.staticMethod()),类似于类中的静态方法。

static方法通常用于定义一些通用的,与接口相关的工具方法,一般很少用。

public interface MyInterface {
    static void staticMethod(){
        System.out.println("This is a static method in the interface.");
    }
}

Java9允许在接口中使用private方法。

private方法可以用于在接口内部共享代码,不对外暴露。

public interface MyInterface {
    // default 方法
    default void defaultMethod(){
        commonMethod();
    }

    // static 方法
    static void staticMethod() {
        commonMethod();
    }
    
    // 私有静态方法,可以被 static 和 default 方法 
    private static void commonMethod() {
        System.out.println("This is a private method used internally.")
    }

    // 实例私有方法,只能被 default 方法调用
    private void instanceCommonMethod(){
        System.out.println("This is a private instance method used internally.");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值