接口与抽象类的区别


一、抽象类

1. 抽象类的定义

抽象就是从多个事物中将共性的、本质的内容抽取出来。包含抽象方法的类叫做抽象类。

2. 抽象方法的由来

多个对象具备相同的功能,但功能的具体内容有所不同,那么在抽取过程中,只抽取功能定义,而不抽取功能主体。只有功能声明而没有功能主体的方法称为抽象方法,由 abstract 关键字修饰。

例如,猫和狗都会叫,但是具体叫的方式是不一样的,所以就可以抽象出来一个动物叫的方法,具体怎么叫由具体的子类实现。

示例:

// 动物类,抽象类
public abstract class Animal {
	// 抽象方法
    public abstract void roar();
}

// 猫
public class Cat extends Animal{
    @Override
    public void roar() {
        System.out.println("喵喵喵。。。");
    }
}

// 狗
public class Dog extends Animal{
    @Override
    public void roar() {
        System.out.println("汪汪汪。。。");
    }
}

3. 抽象类的特点

3.1 访问权限

  • JDK 1.8 以前,抽象类的默认访问权限为 protected
  • JDK 1.8 以后,抽象类的默认访问权限为 default

3.2 抽象类与抽象方法

如果一个类包含抽象方法,那这个类必须是抽象的。相反,一个抽象类里面可以没有抽象方法。

也就是说,抽象类里面可以有抽象方法和普通方法,普通方法子类可以直接使用,而所有的抽象方法子类必须实现。

3.3 抽象类的继承

抽象类也可以继承抽象类。

也就是说,如果从一个抽象类继承,并想创建该新类的对象,那么就必须实现所有的抽象方法。如果没有实现所有的抽象方法(这样也是可以的),那么这个子类也是抽象类。

3.4 抽象类的构造方法

抽象类不能创建实例对象,但可以有自己的构造方法

这两者看上去似乎有些矛盾,但是其实也是合理的。因为抽象类是可以有自己的成员变量的,子类继承之后,还得调用父类的构造方法。也就是说,抽象类可以通过子类向上转型来实现实例化。例如,

Animal animal = new Dog();

二、接口

1. 接口的定义

接口是比抽象类还要抽象的 “类”。接口是一系列方法的声明,是一些方法特征的集合。

接口是为了解决 Java 不能多继承这一问题的,我们可以把接口理解为 100% 的抽象类,即接口中的方法必须全部都是抽象方法(不可以有普通方法)。

2. 接口的特点

  • JDK 1.8以前,接口中的方法必须是 public 的;JDK 1.8时,接口中的方法可以是 public 的,也可以是 default 的。
  • 接口是隐式抽象的,当声明一个接口的时候,不必使用 abstract 关键字;
  • 接口中的方法被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错),接口中每一个方法也是隐式抽象的,声明时同样不需要 abstract 关键字。接口中的方法都是公有的( public ) !!!
  • 接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
  • 接口里面的方法要全部被子类实现。

三、抽象类与接口的区别

  • 抽象类可以有构造方法,接口不可以;
  • 抽象类里可以有普通的成员变量,接口不可以(接口中的变量默认都是 public static final 的);
  • 抽象类里可以有静态方法,接口不可以;
  • 单继承,多实现;
  • 抽象类也可以实现接口,可以把接口中的方法映射到抽象类中作为抽象方法而不必实现,在子类中实现接口方法。
  • 抽象类不能被实例化,但可以有构造方法,子类可以通过 super() 调用父类的构造方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值