根据提供的文档信息,我们可以深入探讨Java中的面向对象编程(OOP)原则,特别是与抽象类相关的概念,并通过具体的示例代码来理解这些原则的应用。 ### Java面向对象编程基础 Java是一种广泛使用的面向对象编程语言,它支持封装、继承、多态等面向对象的基本特性。在Java中,抽象类是一种特殊的类,它可以包含抽象方法(没有实现的方法)和非抽象方法(有具体实现的方法)。抽象类不能被实例化,但可以被其他类继承。继承自抽象类的子类必须提供抽象方法的具体实现,除非该子类本身也被声明为抽象类。 ### 示例代码分析 #### 1. `MyCircle` 类 ```java public class MyCircle extends Shape { private float radius; public MyCircle(int width, int height) { super(width, height); radius = width / 2; this.x = 3; this.y = 45; } @Override public float getArea() { return (float) (Math.PI * radius * radius); } @Override public float getGirth() { return (float) (Math.PI * 2 * radius); } public String toString() { return "这是圆,周长是:" + getGirth() + " 面积是:" + getArea(); } } ``` - **继承**:`MyCircle` 继承自抽象类 `Shape`。 - **构造函数**:定义了一个构造函数,其中计算了圆的半径。 - **重写方法**:实现了 `getArea()` 和 `getGirth()` 方法,分别用于计算面积和周长。 - **toString 方法**:返回一个字符串表示该对象的信息。 #### 2. `MyEllipse` 类 ```java public class MyEllipse extends Shape { public MyEllipse(int width, int height) { super(width, height); this.x = 3; this.y = 85; } @Override public float getArea() { return (float) (Math.PI * (width + height) / 4 * (width + height) / 4); } @Override public float getGirth() { return (float) ((float) 2 * Math.PI * (width + height) / 2); } public String toString() { return "这是一个椭圆,周长是:" + getGirth() + " 面积是:" + getArea(); } } ``` - **继承**:`MyEllipse` 继承自抽象类 `Shape`。 - **构造函数**:定义了一个构造函数。 - **重写方法**:实现了 `getArea()` 和 `getGirth()` 方法,分别用于计算面积和周长。 - **toString 方法**:返回一个字符串表示该对象的信息。 #### 3. `MyRectangle` 类 ```java public class MyRectangle extends Shape { public MyRectangle(int width, int height) { super(width, height); this.x = 3; this.y = 5; } @Override public float getArea() { return width * height; } @Override public float getGirth() { return 2 * (width + height); } public String toString() { return "这是矩形,周长是:" + getGirth() + " 面积是:" + getArea(); } } ``` - **继承**:`MyRectangle` 继承自抽象类 `Shape`。 - **构造函数**:定义了一个构造函数。 - **重写方法**:实现了 `getArea()` 和 `getGirth()` 方法,分别用于计算面积和周长。 - **toString 方法**:返回一个字符串表示该对象的信息。 #### 4. `MyTriangle` 类 ```java public class MyTriangle extends Shape { public MyTriangle(int width, int height) { super(width, height); this.x = 3; this.y = 125; } @Override public float getArea() { return (float) (width * height * 1 / 2); } @Override public float getGirth() { // 这里应该是计算周长,而不是面积 return (float) (width + height + Math.sqrt(width * width + height * height)); } public String toString() { return "这个是三角形,周长是:" + getGirth() + " 面积是:" + getArea(); } } ``` - **继承**:`MyTriangle` 继承自抽象类 `Shape`。 - **构造函数**:定义了一个构造函数。 - **重写方法**:实现了 `getArea()` 和 `getGirth()` 方法,分别用于计算面积和周长。需要注意的是,这里`getGirth()`方法计算的是周长而非面积。 - **toString 方法**:返回一个字符串表示该对象的信息。 #### 5. `Shape` 抽象类 虽然文档中未完整给出 `Shape` 抽象类的定义,但从以上子类的继承关系可以看出,`Shape` 类至少包含了 `getArea()` 和 `getGirth()` 的抽象方法声明,以及可能还包含了一些公共属性(如 `x`, `y` 等坐标属性)和构造函数。 ### 小结 本篇文章通过具体的代码示例深入介绍了Java中面向对象编程的原则之一——抽象类的应用。通过继承抽象类 `Shape` 并实现其抽象方法,`MyCircle`、`MyEllipse`、`MyRectangle` 和 `MyTriangle` 类都能够复用公共行为,并且能够根据具体图形的不同需求进行定制化的实现。这种方式极大地提高了代码的复用性和扩展性。
剩余10页未读,继续阅读
- 粉丝: 30
- 资源: 5万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助