抽象类和接口的区别以及相关问题

抽象类:含有抽象方法的类称为抽象类,并且必须被关键字abstract修饰。其中抽象方法只有声明并无具体实现。抽象类虽然含有构造函数但是不能被实例化,因为抽象类的抽象方法并无具体的实现。普通类要继承抽象类要去实现他的抽象方法,而抽象类可以不去实现他的抽象方法。
抽象类和普通类的区别
1.抽象方法为Public,protect,不能为private
2.不能实例化
3.继承必须实现抽象方法
接口:
首先接口可以理解为更加抽象的抽象方法,可以有变量和方法,但是变量的关键字被指定为public static final.方法的关键字被指定为public abstract 。除了上述的变量和方法不能有其他的关键字的方法和变量。
抽象类和接口的区别:
1.抽象类只能单继承,接口可以多次实现
2.抽象类可以有自己的成员变量和非abstract成员方法,而接口变量的关键字被指定为public static final.方法的关键字被指定为public abstract
3.继承和实现抽象类或接口,必须实现他们的抽象方法,除非子类是抽象类。接口可以继承接口,抽象类也可以继承接口,个人认为抽象类不能继承接口。
4.接口的变量默认public static final ,且必须给初值。
5.接口中默认的也都是public,abstract不能是static,但是抽象类可有static方法。
抽象类为什么要有构造函数:
首先可以初始化抽象类的内部通用变量,其次编译器会为抽象类提供一个默认无参构造,否则子类无法编译,因为它会首先调用super()。
Java 抽象类可以实现接口吗?它们需要实现所有的方法吗?
可以,抽象类可以通过使用关键字 implements 来实现接口。因为它们是抽象的,所以它 们不需要实现所有的方法。好的做法是,提供一个抽象基类以及一个接口来声明类型 。 这样的例子是,java.util.List 接口和相应的 java.util.AbstractList 抽象类。因为 AbstractList 实现了所有的通用方法,具体的实现像 LinkedList 和 ArrayList 不受实现所有方法的负担, 它们可以直接实现 List 接口。这对两方面都很好,你可以利用接口声明类型的优点和抽象 类的灵活性在一个地方实现共同的行为。Effective Java 有个很好的章节,介绍如何使用 Java 的抽象类和接口,值得阅读。
何时选用抽象类而不是接口?
这是对之前抽象类和接口对比问题的后续。如果你知道语法差异,你可以很容易回答这个 问题,因为它们可以令你做出抉择。当关心升级时,因为不可能在一个发布的接口中添加 一个新方法,用抽象类会更好。类似地,如果你的接口中有很多方法,你对它们的实现感 到很头疼,考虑提供一个抽象类作为默认实现。这是 Java 集合包中的模式,你可以使用 提供默认实现 List 接口的 AbstractList。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值