下面代码中创建了两个几何对象:一个圆和一个矩形,调用equalArea方法来检查它们的面积是否相同,然后调用displayGeometricObject方法来显示它们。
public class TestGrometricObject {
public static void main(String[] args) {
GeometricObject geoObject1 = new Circle(5);
GeometricObject geoObject2 = new Rectangle(5,3);
System.out.ptintln("The two objects have the same area? " + equalArea (geoObject1, geoObject2));
displayGeometricObject(geoObject1);
displayGeometricObject(geoObject2);
}
public static boolean equalArea(GeometricObject object1, GeometricObject object2) {
return object1.getArea() == object2.getArea();
}
public static void displayGeometricObject(GeometricObject object) {
System.out.println();
System.out.println("The area is " + object.getArea());
System.out.println("The perimeter is " + object.getPerimeter());
}
}
输出
The two objects have the same area? false
The area is 78.53981633974483
The perimeter is 31.41592653589793
The area is 14.0
The perimeter is 16.0
Circle类和Rectangle类中覆盖了定义在GeometricObject类中的getArea()和getPerimeter()方法。语句(第3~4行):
GeometricObject geoObject1 = new Circle(5);
GeometricObject geoObject2 = new Rectangle(5,3);
创建了一个新圆和一个新矩形,并把它们赋值给变量geoObject1和geoObject2.这两个变量都是GeometricObject类型的。
当调用equalArea(geoObject1,geoObject2)时(第5行),由于geoObject1是一个圆,所以object1.getArea()使用的是Circle类定义的getArea()方法,而geoObject2是一个矩形,所以object2.getArea()使用的是Rectangle类的getArea()方法。
类似地,当调用displayGeometricObject(geoObject1)时(第6行),使用在Circle类中定义的getArea和getPerimeter方法,而当调用displayGeometricObject(geoObject2)(第7行)时,使用的是在Rectangle类中定义的getArea和getPerimeter方法。JVM在运行时根据对象的类型动态地决定调用哪一个方法。
注意 如果GeometricObject里没有定义getArea方法,就不能在该程序中定义equalArea方法来计算这两个几何对象的面积是否相同。所以,现在可以看出在GeometricObject中定义抽象方法的好处。
分享到:
相关推荐
5. **禁止static或virtual**:抽象方法不能同时声明为`static`或`virtual`。 抽象属性与抽象方法的行为类似,它们也需要在派生类中通过`override`关键字进行重写。抽象属性也不能在静态类中声明。 在实际应用中,...
1. 抽象方法是只有声明没有实现的方法,可以视为没有方法体的虚方法。例如: ```csharp public abstract void E(); ``` 2. 抽象类不能被实例化,只能用作其他类的基类。这意味着不能创建抽象类的对象。 ```csharp ...
- 含有抽象方法的类必须声明为抽象类。 - 抽象类可以没有抽象方法,但只要有抽象方法,类就必须是抽象的。 - 抽象类的成员方法可以是普通方法或抽象方法。 - 继承抽象类的子类必须实现所有抽象方法,否则子类也...
首先,我们需要理解什么是抽象方法。在面向对象编程中,抽象方法是一种没有具体实现的方法,它只有声明,没有具体的操作。这样的方法存在于抽象类中,抽象类不能被实例化,只能作为其他类的父类。当一个类包含抽象...
例如,我们可以定义一个名为`Animal`的抽象类,它包含一个抽象方法`eat()`。抽象方法是没有具体实现的,由继承它的子类来提供具体的实现。 ```java public abstract class Animal { public abstract void eat(); }...
Java作为一种广泛使用的编程语言,提供了多种机制来实现代码的复用性和灵活性,其中抽象类和抽象方法是关键特性之一。 ### 一、Java抽象类 #### 定义 抽象类在Java中是一种特殊类型的类,它不能被实例化,即无法...
本文将详细介绍C#中的抽象类与抽象方法,包括它们的基本概念、特点以及如何在实际编程中使用。 #### 二、抽象类 抽象类是一种特殊类型的类,它主要用于作为其他类的基类。抽象类不能被实例化,即不能直接创建抽象类...
本文将详细介绍抽象方法和抽象类的概念、特征和使用场景。 一、抽象方法 抽象方法是一个没有实现的方法,只包含方法的定义,而没有方法体。抽象方法的声明需要在方法名称前加上"abstract"关键字,例如:public ...
这里的“标签”“实现抽象方法”进一步强调了我们正在关注的是如何在子类中具体实现抽象类定义的抽象方法。这是多态性的一个关键应用,它允许我们使用父类的引用处理子类的对象,而无需知道具体的形状类型,从而实现...
抽象类与抽象方法由abstract修饰 abstract的使用注意 抽象方法没有方法体 抽象成员只能存在于抽象类中 抽象类可以有非抽象成员(侧重族群的概念) 抽象类的子类必须实现抽象方法体 抽象类you构造函数 抽象类只能...
* 抽象类中不一定要包含抽象方法,也可以包含具体的方法。 四、实例分析 让我们看一个实例分析,了解如何使用抽象类和抽象方法。首先,我们定义了一个抽象类Animal: ```java abstract class Animal { String ...
抽象类可以包含抽象方法,这些方法没有实现,必须由继承它的任何子类提供具体实现。此外,抽象类也可以包含非抽象方法,即有具体实现的方法。 **结合虚方法和抽象类** 在某些情况下,我们可能希望在抽象类中提供虚...
如果一个类继承了含有抽象方法的抽象类,那么这个子类必须实现所有抽象方法,否则它也必须声明为抽象类。这种方式确保了子类具备必要的功能。 4. **模板方法设计模式**:抽象类可以包含部分实现的方法,称为模板...
C#类、接口、虚方法和抽象方法-接口与抽象类的区别实例 C#类、接口、虚方法和抽象方法-接口与抽象类的区别实例
抽象类Shape被设计为一个基础类,它定义了两个抽象方法:`getArea()` 和 `getPerimeter()`,用于计算形状的面积和周长。抽象方法在Java中是没有具体实现的,它们必须由派生类来实现。 首先,我们创建了一个名为`...
一个类如果包含至少一个抽象方法,则该类必须声明为抽象类。抽象类不一定全部由抽象方法组成,也可以有具体的实现。在C#中,抽象方法只能在抽象类中定义。 另一方面,接口(Interface)更像是一个完全抽象的契约,...
在Java编程语言中,抽象类是用来作为其他类的基类,它定义了一组抽象方法,这些方法必须在子类中实现。由于抽象类自身不能被实例化,这意味着你不能使用`new`关键字直接创建一个抽象类的对象。然而,尽管不能直接...
抽象方法是没有实现的方法,仅仅是声明,而非抽象方法是已经实现的方法。在 Java 中,抽象类使用 abstract 关键字声明。 在上面的练习中,我们使用抽象类来编写 Java 程序。首先,我们创建了一个名为 LivingThing ...
抽象方法使用`abstract`关键字声明,主要用于强制要求子类必须实现这些方法。 - **特点**: - 抽象方法没有方法体,不能直接调用。 - 抽含抽象方法的类必须声明为抽象类。 - 子类必须实现所有抽象方法,除非子类...
3. **抽象属性与方法**:抽象类可以包含普通属性、虚方法以及普通方法,但一旦包含了一个或多个抽象方法,整个类就必须被标记为`abstract`。 4. **派生类的要求**:派生类必须实现基类中的所有抽象方法。如果派生类...