文档详情

第6章面向对象特征.ppt

发布:2025-06-10约2.18万字共109页下载文档
文本预览下载声明

前面章节中定义的类可以创建对象,它们都是具体的类。在Java中还可以定义抽象类。抽象类(abstractclass)是包含抽象方法的类。抽象类假设要开发一个图形绘制系统,需要定义圆(Circle)类、矩形(Rectangle)类和三角形(Triangle)类等,这些类都需要定义求周长和面积的方法,这些方法对不同的图形有不同的实现。这时就可以设计一个更一般的类,比如几何形状(Shape)类,在该类中定义求周长和面积的方法。由于Shape不是一个具体的形状,这些方法就不能实现,因此要定义为抽象方法(abstractmethod)。定义抽象方法需要在方法前加上abstract修饰符。抽象方法只有方法的声明,没有方法的实现。包含抽象方法的类必须定义为抽象类,定义抽象类需要的类前加上abstract修饰符。下面定义的Shape类即为抽象类,其中定义了两个抽象方法。抽象类publicabstractclassShape{Stringname;publicShape(){}//抽象类可以定义构造方法publicShape(Stringname){=name;}publicabstractdoublegetArea();//定义抽象方法publicabstractdoublegetPerimeter();//定义抽象方法}程序6-11Shape.java在抽象类中可以定义构造方法,这些构造方法可以在子类的构造方法中调用。尽管在抽象类中可以定义构造方法,但抽象类不能被实例化,即不能用new生成抽象类的对象,如下列语句将会产生编译错误:Shapesh=newShape();抽象类在抽象类中可以定义非抽象的方法。可以创建抽象类的子类,抽象类的子类还可以是抽象类。只有非抽象的子类才能使用new创建该类的对象。抽象类中可以没有抽象方法,但仍然需要被子类继承,才能实例化。publicclassCircleextendsShape{protecteddoubleradius;publicCircle(){this(0.0);}publicCircle(doubleradius){super(圆);//调用父类的构造方法this.radius=radius;}publicvoidsetRadius(doubleradius){this.radius=radius;}程序6-12Circle.javapublicdoublegetRadius(){returnradius;}@OverridepublicdoublegetPerimeter(){//实现父类的抽象方法return2*Math.PI*radius;}@OverridepublicdoublegetArea(){//实现父类的抽象方法returnMath.PI*radius*radius;}@OverridepublicStringtoString(){//覆盖Object类的toString()方法return[圆]radius=+radius;}}6.1.1课堂讨论及训练定义Rectangle类表示矩形,继承Shape抽象类,实现其中的getPerimeter()方法和getArea()方法。面向对象程序设计(Java语言描述?微课版?基于IntelliJIDEA)面向对象程序设计为了讨论方便,先介绍两个术语:子类型和父类型。一个类(或接口)实际上定义了一种类型。子类定义的类型称为子类型,而父类(或接口)定义的类型称为父类型。因此,对7.6节中定义的Shape类和Circle类,就可以说Circle是Shape的子类型,Shape类是Circle的父类型。概述子类是它的父类的特殊化,每个子类的实例也都是它父类的实例,但反过来不成立。因此,子类对象和父

显示全部
相似文档