Java抽象类和接口

目录

1.抽象类

2.接口

3.两者相同点和区别


1.抽象类

概念:使用abstract关键字修饰的类叫做抽象类。

格式:修饰符 abstract class 类名{}

特点:

  • 抽象类中可以不写抽象方法,但有抽象方法的类一定是抽象类
  • 普通类含有的成员(变量、方法、构造器)抽象类都具备
  • 抽象类虽然有构造方法,但是不能用于实例化,主要用途是被子类调用
  • 一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类
  • 抽象类中的抽象方法的修饰符只能是public或者protected,默认是public
  • 抽象方法只能有方法签名,不能有方法体

2.接口

概念:接口就是规范,定义的是一组规则,接口的本质是契约,标准,规范。

格式:public interface 接口名{}

特点:

  • 接口中只包含变量和方法,没有构造器
  • 一个接口可以同时继承(extends)多个接口,一个类可以同时实现(implements)多个接口
  • 接口中的所有变量被隐式指定为public static final
  • JDK8之前,接口中的所有方法被隐式指定为public abstract
  • JDK8开始,接口新增了三个方法,分别是default方法、static方法、private方法
    • default方法:实现类可以不重写该方法,用实现类直接调用
    • static方法:直接用接口名调用
    • private方法:当前接口中的其他方法调用

注意事项:

  • 一个接口继承多个接口,如果多个接口中存在方法签名冲突,即多个方法的方法名相同,返回值不同,则此时不支持多继承
interface A {
    int method(); // 返回值为int
}

interface B {
    String method(); // 返回值为String
}

interface C extends A,B{ // 报错,此时不支持多继承

}
  • 一个类实现多个接口,如果多个接口中存在方法签名冲突,即多个方法的方法名相同,返回值不同,则此时不支持多实现
interface A {
    int method(); // 返回值为int
}

interface B {
    String method(); // 返回值为String
}

class C implements A,B{ // 报错,此时不支持多实现

}
  • 一个类实现了多个接口,多个接口中存在同名的默认方法,则这个类需重写该方法,否则冲突
interface A {
    default void method(){ 
        System.out.println("A");
    }
}

interface B {
    default void method(){
        System.out.println("B");
    }
}

class C implements A, B{

    // 此时必须重写该方法,否则报错
    @Override
    public void method() {
        System.out.println("C");
    }
}
  • 一个类继承父类并实现接口时,继承在前,实现在后(顺序不可变),多个接口用逗号隔开
class A {
    
}

interface B {
    
}

interface C {
    
}

class D extends A implements B,C{
    
}

class E implements B,C extends A { // 报错,必须先继承,再实现
    
}

3.两者相同点和区别

  • 相同点
    • 两者都不能被实例化
    • 子类重写抽象类的所有抽象方法/实现类重写接口的所有抽象方法才能被实例化
  • 区别
    • 继承抽象类的关键字为extends,实现接口的关键字为implements
    • 一个类只能继承一个抽象类,但可以实现多个接口
    • 抽象类中成员变量无要求,接口中的成员变量默认为public static final修饰的,且必须赋初值,不能被修改
    • 抽象类中有构造方法,接口中没有构造方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值