【JavaBase】09-面向对象之抽象与接口.pptxVIP

  • 3
  • 0
  • 约6.8千字
  • 约 32页
  • 2017-06-06 发布于湖北
  • 举报

【JavaBase】09-面向对象之抽象与接口.pptx

Java程序设计与开发基础 09 面向对象之抽象与接口 Java Program Design Development Essential 谢钟扬 抽象类 接口 接口与抽象的区别 1 2 3 抽象类 代码练习: 根据如下类图,编码实现 抽象类 现象与思考: 形状(Shape)类,求周长(getPerimeter())和求面积(getArea())方法,无法写出具体的实现,因为不确定是何种具体的形状。对于这种现象: 方案1:形状(Shape)类中不写这两个方法,由子类去自行定义? 方案2:形状(Shape)类中这两个方法方法体留空,由子类去覆盖? 上述两种方案的区别在哪? 方案1意味着:形状类没有求周长和求面积的行为。如果将子类对象向上转型为形状对象使用的话,就不能进行求周长和求面积的操作。 方案2意味着:形状类有求周长和求面积的行为,但是没有实现方法体,如果对一个形状类的对象调用这两个方法,什么也不做。 抽象类 我们希望: 通过形状(Shape)类来指定所有的形状都可以求周长和面积。 但是形状类本身并不会求周长和面积,只有其具体的某个子类知道如何求自己的周长和面积。 为了防止形状类的对象去调用未知的求周长和面积的方法,要禁止形状类创建对象,而只允许其子类创建对象(因为只有子类才知道如何求自身的周长和面积)。 抽象类的概念: 通过抽取共性得到的类,只将它作为派生其他类的基类,而不作为想使用的特定的实例类,这样的类称为抽象类。 对于抽象类中,只是为了说明其所有子类都能进行的动作,而作为其本身并无法确定如何进行的方法,称为抽象方法。抽象方法只有方法的声明,没有方法体。 抽象类 在Java中,使用关键字abstract来表示抽象。 用abstract修饰类,则声明该类为抽象类,不允许创建实例。 用abstract修饰方法,则声明该方法为抽象方法,不允许有方法体。 如果一个类有抽象方法,则该类必为抽象类。 抽象类的子类必须覆盖其抽象方法。 抽象类 前述类图可修改为如下所示: 抽象类 public abstract class Shape { String name; abstract double getPerimeter(); abstract double getArea(); } public class Circle extends Shape{ double radius; public Circle(double radius) { this.radius = radius; } double getPerimeter() { return 3.14 * 2 * radius; } double getArea() { return 3.14 * radius * radius; } } Shape.java Circle.java 抽象类 public static void main(String[] args) { Shape circle = new Circle(5号圆 , 5.0); System.out.println(circle.name + 的周长为: + circle.getPerimeter()); System.out.println(circle.name + 的面积为: + circle.getArea()); } 运行结果: 抽象类 代码练习: 请完成矩形(Rectengle),三角形(Triangle),正方形(Square)类的编写,实现其求周长,求面积方法。 代码练习: 音乐(Music)类的演奏(tune(Instrument instrument))方法将调用参数指定的乐器类对象的演奏(play())方法,将音乐类的所有音符弹奏出来;请根据类图编码实现分别使用弦乐,管乐,打击乐演奏《两只老虎》。 接口 思考题: 轿车(Car)类、卡车(Truck)类,船(Ship)类,飞机(Aircraft)类都是交通工具(Vehicle)类的子类。其中,只有飞机类有飞行(fly())方法和着陆(land())方法。 狗(Dog)类,鱼(Fish)类和鸟(Bird)类都是动物(Animal)类的子类,其中,鸟类有飞行(fly())方法和着陆(land())方法。 请按照类图编写代码 接口 思考题: 人(Person)类有飞去(flyTo())方法,通过参数指定乘坐某个能飞的对象,到达某处。其中,

文档评论(0)

1亿VIP精品文档

相关文档