java——抽象类和接口有什么区别

我就是我 2022-12-21 06:12 324阅读 0赞

抽象类

在运行时多态/动态绑定中通常会有些类中的方法没有具体的实现,而是在在被子类继承和重写之后才会安排具体的执行方法

下面的代码就是以上所提到的情况:

  1. class Shape {
  2. public void draw() {
  3. }
  4. }
  5. class Cycle extends Shape {
  6. @Override
  7. public void draw() {
  8. System.out.println("○");
  9. }
  10. }
  11. class Rect extends Shape {
  12. @Override
  13. public void draw() {
  14. System.out.println("□");
  15. }
  16. }
  17. class Flower extends Shape {
  18. @Override
  19. public void draw() {
  20. System.out.println("♣");
  21. }
  22. }
  23. public class TestDemo1114_1 {
  24. public static void main(String[] args) {
  25. Shape shape1 = new Flower();
  26. Shape shape2 = new Cycle();
  27. Shape shape3 = new Rect();
  28. drawShape(shape1);
  29. drawShape(shape2);
  30. drawShape(shape3);
  31. }
  32. // 打印单个图形
  33. public static void drawShape(Shape shape) {
  34. shape.draw();
  35. }
  36. }

在刚才的打印图形例子中, 我们发现, 父类 Shape 中的 draw 方法好像并没有什么实际工作, 主要的绘制图形都是由Shape 的各种子类的 draw 方法来完成的. 像这种没有实际工作的方法, 我们可以把它设计成一个 抽象方法(abstractmethod), 包含抽象方法的类我们称为 抽象类(abstract class)

  1. abstract class Shape {
  2. abstract public void draw();
  3. }
注意事项
  • 1.抽象方法一定包含再抽象类中
  • 2.抽象类不能被 实例化
  • 3.抽象类主要就是用来被继承的
  • 4.如果一个类继承了这个抽象类,这个类必须重写抽象类中的抽象方法
  • 5.当抽象类A继承抽象类B,抽象类A可以不重写B中的方法,但是一旦抽象类A要是在被C继承继承,那么就一定要在C中重写这个抽象方法
  • 6.抽象类或者抽象方法一定不能被final修饰的

接口

接口是抽象类的更进一步. 抽象类中还可以包含非抽象方法, 和字段. 而接口中包含的方法都是抽象方法, 字段只能包含
静态常量

以下代码是使用接口的:

  1. interface IShape {
  2. void draw();
  3. }
  4. class Cycle implements IShape {
  5. @Override
  6. public void draw() {
  7. System.out.println("○");
  8. }
  9. public class Test {
  10. public static void main(String[] args) {
  11. IShape shape = new Rect();
  12. shape.draw();
  13. }
  14. }
注意事项
  • 1.接口中的方法都是抽象方法 ,因此可以省略 abstract
  • 2.其实可以有具体实现的方法(再jdk1,8加入的),方法前面加上default:(一般情况不用)
    default public void func(){}
  • 3.接口中定义的成员变量默认为常量 ,需要初始化
  • 4.接口中的成员变量,默认为public static final
  • 接口中的成员方法默认为: public abstract
  • 5.接口是不可以用来实例化
  • 6.接口和类之间的关系为implements
  • 7.解决java中的单继承问题,可以实现多个接口
  • 8.只要这个类实现了该接口,那么你就可以进行向上转型

发表评论

表情:
评论列表 (有 0 条评论,324人围观)

还没有评论,来说两句吧...

相关阅读

    相关 抽象接口什么区别

    首先抽象类和接口都是 Java 中多态的常见使用方式。 区别可以理解为接口比抽象类更加的抽象,但是抽象类的功能是比接口更多的。 关于了解接口与抽象类更多的区别,请参考这篇博

    相关 java抽象接口什么区别

    很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题。本文我们将仔细讨论这些话题。 在讨论它们之间的不同点之前,我们先看看

    相关 抽象接口什么区别

    (1)接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。 抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类

    相关 接口抽象什么区别

    接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么? 接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。 抽象类表示的是,这个对象是什么。...