Java抽象类和接口

Java抽象类和接口


什么是抽象类和抽象方法
在Java中,当一个类被abstract关键字修饰时,该类称为抽象类。
在Java中,当一个类的方法被abstract关键字修饰时,该方法称为抽象方法。抽象方法所在的类必须定义为抽象类。抽象方法不会有具体的实现,而是在抽象类的子类中通过方法重写进行实现。
当一个类被定义为抽象类时,它可以包含各种类型的成员,包括属性、方法等,其中方法可以是普通方法和抽象方法。

抽象类的特点

  • 抽象类不能被实例化,只能被继承。
  • 包含抽象方法的类一定是抽象类,但抽象类不一定包含抽象方法(抽象类可以包含普通方法)。
  • 抽象方法的权限修饰符只能为 public、protected 或 default,默认情况下为 public。
  • 一个类继承于一个抽象类,则子类必须实现抽象类的抽象方法,如果子类没有实现父类的抽象方法,那子类必须定义为抽象类。
  • 抽象类可以包含属性、方法、构造方法,但构造方法不能用来实例化对象,只能被子类调用。
  • 一般情况下,实现类和它的抽象类具有 “is-a” 的关系。

抽象类的实现

2.png-19.3kB

1.png-11.3kB
上面的代码中,不可以直接实例化抽象类,但是抽象类的子类是可以实例化的。因为Animal是抽象类,可以将其中的print()方法抽象化,让子类重写,打印出详细的信息。

修改上述代码,使其子类实例化
3.png-16.7kB

5.png-28.5kB

4.png-13.7kB
运行结果如下:
6.png-3.6kB

什么是接口
接口是一个不能实例化的类型,只能用interface修饰。

接口的特点

  • 接口中可以包含变量和方法,变量被隐式指定为 public static final,方法被隐式指定为 public
    abstract(JDK 1.8 之前)。
  • 接口支持多继承,即一个接口可以继承(extends)多个接口,间接解决了 Java 中类不能多继承的问题。
  • 一个类可以同时实现多个接口,一个类实现某个接口则必须实现该接口中的抽象方法,否则该类必须被定义为抽象类。
  • 一般情况下,实现类和它的接口具有 “has-a” 的关系。

7.png-5.9kB

8.png-12.5kB

9.png-12.5kB
结果运行如下:
10.png-4.4kB

抽象类和接口的异同点

相同点

  • 接口和抽象类都不能被实例化,主要用于被其他类实现和继承。
  • 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。

不同点
11.png-55.1kB

面向对象的原则

  • 在某些时候,行为的复杂性变化很大,这种行为最好定义为接口。
  • 有些时候,如果想实现多重继承,那么必须使用接口。
  • 如果想减少实现类的代码冗余,实现默认的属性和方法,最好使用抽象类。
  • 如果需求有变化,最好使用接口来添加或更改。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值