Java抽象类和抽象方法归纳总结

这篇文章从不同角度归纳介绍了抽象类的知识点及其注意事项。文中引用的具体例子在这里:抽象类的一个例子

  • Triangle类是继承自抽象类GeometriObject的具体子类
  • GeometriObject中包含两个抽象方法:getPerimeter,getArea/
  • Triangle中实现了这两个方法

好了,进入正题。

一,抽象类关键点

抽象类不可以用于创建对象。 抽象类可以包含抽象方法, 这些方法将在具体的子类中实现。

二,抽象类与抽象方法的定义

1.抽象类

  • 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类

  • 抽象类设计得非常抽象, 以至于它都没有任何具体的实例。

  • 在类头使用 abstract修饰符表示该类为抽象类
    例如:abstract class GeometricObject

2.抽象方法

GeometricObject就成为一个抽象类。

  • 抽象方法指一些只有方法声明,而没有具体方法体的方法。
  • 在方法头中使用 abstract 修饰符表示
    例如:public abstract double getPerimeter();

在UML图形记号中,抽象类和抽象方法的名字用斜体表示.

三,注意事项

1.关于抽象类的构造函数的问题

  1. 抽象类的构造方法定义为 Protected, 因为它只被子类使用。
  2. 创建一个具体子类的实例时,它的父类的构造方法被调用以初始化父类中定义的数据域。

2.抽象类与常规类的区别

  1. 抽象类和常规类很像,但是不能使用new 操作符创建它的实例。
  2. 抽象类也不能使用 new 操作符来初始化的。 但是,仍然可以定义它的构造方法, 这个构造方法在它的子类的构造方法中调用。
    例如, CeometricObject 类的构造方法在 Triangle 类中调用:
public Triangle(String color, boolean filled, double side1, double side2, double side3) {
    
    
        super(color, filled);
        this.side1 = side1;
        this.side2 = side2;
        this.side3 = side3;
    }

  1. 不能使用 new 操作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型。
    例如, 下面的语句创建一个元素是 CeometricObject 类型的数组是正确的:
    GeometricObject[] objects = new CeometricObject[10];
    然后可以创建一个 CeometricObject 的实例, 并将它的引用赋值给数组,如下所示:
    Objects[0] = new Triangle();

3.抽象方法的定义和实现问题

  1. 抽象方法在抽象类中只有定义而没有实现。 它的实现由子类提供
    例如:抽象类CeometricObject 中两个抽象方法:
//两个抽象方法
    public abstract double getArea();
    public abstract double getPerimeter();
  1. 抽象类拓展的非抽象子类必须将此抽象类的所有抽象方法重写
    例如:CeometricObject 的子类Triangle类
 //一定要重写实现抽象父类中的抽象方法
    @Override
    public double getArea() {
    
    
        double s = (side1 + side2 + side3)/2;
        return Math.sqrt(s*(s-side1)*(s-side2)*(s-side3));
    }

    @Override
    public double getPerimeter() {
    
    
        return side1+side2+side3;
    }

  1. 如果抽象父类的子类不能实现所有的抽象方法, 那么子类也必须定义为抽象类。也就是子类可以覆盖父类的方法并仍将它定义为 abstract

  2. 抽象方法不能定义在非抽象类中。

  3. 还要注意到,抽象方法是非静态的

4.抽象方法和抽象类之间的关系

  1. 只要包含抽象方法,该类必须声明为抽象类。
  2. 但是抽象类可以不包含抽象方法

5.抽象类父类和子类的关系

  1. 父类是抽象类
    • 子类是非抽象类,那么子类必须重写实现父类中的所有抽象方法
    • 子类也是抽象类,子类不必实现父类中的所有抽象方法
  2. 子类是抽象类。父类既可以是抽象的也可以是具体的。
    例如, Object 类是具体的, 但是它的子类如 CeometricObject 可以是抽象的

友情链接——纯干货
Java面向对象,这些你一定想再来复习复习:

  1. Java继承入门全部知识归纳总结
  2. Java多态基础知识完整的归纳总结
  3. Java接口入门全部知识总结
  4. Java可见性修饰符public/private/protected的归纳总结

猜你喜欢

转载自blog.csdn.net/qq_45768060/article/details/106679648
今日推荐