21xrx.com
2024-09-20 06:03:11 Friday
登录
文章检索 我的文章 写文章
Java抽象类示例
2023-07-03 04:54:39 深夜i     --     --
Java抽象类 示例 抽象方法 继承 实现

Java是一种广泛使用的编程语言,它的诸多特性使得它成为开发各种类型应用程序的首选。其中,Java抽象类是一种非常常见的概念,用于定义一组共同的属性和方法,但并未实现这些方法,而是交给其子类来实现。

抽象类定义了一种抽象的概念,可以用来对类进行分组和组织,是一种类似于模板的实现。在Java语言中,抽象类用abstract关键字进行定义,并且不能被实例化。

下面以一个示例来解释Java抽象类的使用。假设我们要定义一个图形类,包含一些基本的属性和方法,然后定义三个子类:圆形、矩形和三角形,分别实现这些方法。

首先定义一个抽象类Shape:


public abstract class Shape{

  protected String color;

  protected boolean filled;

  

  public Shape()

    color = "blue";

    filled = false;

  

  

  public Shape(String color, boolean filled)

    this.color = color;

    this.filled = filled;

  

  

  public String getColor()

    return color;

  

  

  public void setColor(String color)

    this.color = color;

  

  

  public boolean isFilled()

    return filled;

  

  

  public void setFilled(boolean filled)

    this.filled = filled;

  

  

  public abstract double getArea();

  public abstract double getPerimeter();

  public abstract String toString();

}

该抽象类具有一些基本属性和方法,包括形状的颜色、填充和非填充状态,以及获取面积、周长和字符串表示的方法,其中面积、周长和字符串表示的方法是抽象的,需要子类来实现。

现在定义三个子类,首先是圆形类Circle:


public class Circle extends Shape {

  protected double radius;

  public Circle()

    radius = 1.0;

  

  public Circle(double radius)

    this.radius = radius;

  

  public Circle(double radius, String color, boolean filled) {

    super(color, filled);

    this.radius = radius;

  }

  public double getRadius()

    return radius;

  

  public void setRadius(double radius)

    this.radius = radius;

  

  public double getArea() {

    return Math.PI * radius * radius;

  }

  public double getPerimeter() {

    return 2 * Math.PI * radius;

  }

  public String toString() {

    return "A Circle with radius = " + radius + ", which is a subclass of " + super.toString();

  }

}

圆形类继承自Shape抽象类,并实现了颜色、填充和非填充等属性,同时实现了三个抽象方法以计算圆形的面积、周长和字符串表示。

接下来是矩形类Rectangle:


public class Rectangle extends Shape {

  protected double width;

  protected double length;

  public Rectangle()

    width = 1.0;

    length = 1.0;

  

  public Rectangle(double width, double length)

    this.width = width;

    this.length = length;

  

  public Rectangle(double width, double length, String color, boolean filled) {

    super(color, filled);

    this.width = width;

    this.length = length;

  }

  public double getWidth()

    return width;

  

  public void setWidth(double width)

    this.width = width;

  

  public double getLength()

    return length;

  

  public void setLength(double length)

    this.length = length;

  

  public double getArea() {

    return width * length;

  }

  public double getPerimeter() {

    return 2 * (width + length);

  }

  public String toString() {

    return "A Rectangle with width = " + width + " and length = " + length + ", which is a subclass of " + super.toString();

  }

}

矩形类同样继承自Shape抽象类,并实现了颜色、填充和非填充等属性,同时实现了三个抽象方法以计算矩形的面积、周长和字符串表示。

最后是三角形类Triangle:


public class Triangle extends Shape {

  protected double side1;

  protected double side2;

  protected double side3;

  public Triangle()

    side1 = 1.0;

    side2 = 1.0;

    side3 = 1.0;

  

  public Triangle(double side1, double side2, double side3)

    this.side1 = side1;

    this.side2 = side2;

    this.side3 = side3;

  

  public Triangle(double side1, double side2, double side3, String color, boolean filled) {

    super(color, filled);

    this.side1 = side1;

    this.side2 = side2;

    this.side3 = side3;

  }

  public double getSide1()

    return side1;

  

  public void setSide1(double side1)

    this.side1 = side1;

  

  public double getSide2()

    return side2;

  

  public void setSide2(double side2)

    this.side2 = side2;

  

  public double getSide3()

    return side3;

  

  public void setSide3(double side3)

    this.side3 = side3;

  

  public double getArea() {

    double p = getPerimeter() / 2;

    return Math.sqrt(p * (p - side1) * (p - side2) * (p - side3));

  }

  public double getPerimeter() {

    return side1 + side2 + side3;

  }

  public String toString() {

    return "A Triangle with side1 = " + side1 + ", side2 = " + side2 + ", and side3 = " + side3 + ", which is a subclass of " + super.toString();

  }

}

三角形类同样继承自Shape抽象类,并实现了颜色、填充和非填充等属性,同时实现了三个抽象方法以计算三角形的面积、周长和字符串表示。

通过这些类的定义,我们可以很方便地创建不同类型的图形对象,并调用其相应的方法。这种使用抽象类的方式可以方便地实现多态性和代码重用,也为软件架构提供了更加灵活的设计方案。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复