Java面向对象程序设计与系统开发第3章面向对象设计思想.ppt
面向对象程序设计与系统开发,第3章 面向对象设计思想,2,驱动任务一,创建一个抽象类Animal,它包含一个abstract的sound()方法;派生一个子类Dog,实现父类抽象方法sound();创建子类Dog对象,然后调用它的sound()方法。,3,目标及知识点,4,抽象类,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类,定义一个抽象类的格式如下,abstract class AbstractClassName,public abstract class Shapepublic abstract double area();/抽象方法public abstract double volume();/抽象方法,当一个类被定义成abstract类时,表示一个抽象的概念,它不能用new关键字实例化对象,例如上面定义的Shape类就是一个抽象类,只有被继承并在子类中重写其抽象方法,它才有意义。,5,【例3-1】,定义一个代表形状的抽象类,并派生出圆柱体类和长方体类,计算底面半径为2高为3的圆柱体体积和长、宽、高分别为3、2、4的长方体体积。,/定义一个形状抽象类abstract class Shapedouble radius,length,width,height;abstract double vol();/求体积的抽象方法Shape(double r,double h)/对半径和高进行初始化的构造方法radius=r;height=h;Shape(double l,double w,double h)/对长宽高进行初始化的构造方法length=l;width=w;height=h;,/*圆柱体类*/class Circle extends ShapeCircle(double r,double h)super(r,h);double vol()/重写父类抽象方法return(3.1416*radius*radius*height);,/*长方体类*/class Rectangle extends ShapeRectangle(double l,double w,double h)super(l,w,h);double vol()/重写父类抽象方法return(length*width*height);,/*主类*/public class AbstractClassDemo public static void main(String args)Circle c=new Circle(2,3);Rectangle r=new Rectangle(3,2,4);System.out.println(圆柱体体积=+c.vol();System.out.println(长方体体积=+r.vol();,结果:圆柱体体积37.6992长方体体积24.0,【思考】abstract修饰的类一定有abstract修饰的方法吗?,Java面向对象软件开发,6,最终类-final类,有一种类是不能派生出子类的,我们叫这种类为最终类。即我们用final来修饰的类。,public final class Test1,Java面向对象软件开发,7,最终类-final类,如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法,public final void f2()System.out.println(f2);,Java面向对象软件开发,8,【例3-2】使用final方法的例子,class Test1 public void f1()System.out.println(f1);/无法被子类覆盖的方法public final void f2()System.out.println(f2);,public class Test2 extends Test1public void f1()System.out.println(Test1父类方法f1被覆盖!);public static void main(String args)Test2 t=new Test2();t.f1();t.f2();/调用从父类继承过来的final方法,结果:Test1父类方法f1被覆盖!f2,9,任务实现,分析类及关系,定义抽象类Animal,Dog类利用构造方法为type属性赋值,Dog类实现Animal的sound(),main方法进行测试,10,驱动任务二,有一个接口AddImp规定了有求和的方法sum();另外一个SubImp接口规定了有减法运算的方法subtract();再声明一个接口Calculatable继承于以上两个接口。创建Calculator类实现接口Calculatable,并生成对象测试该对象的加减功能。,11,目标及知识点,12,接口的定义,在Java语言中,用关键字interface来定义接口。接口与类有相似的结构,其定义格式如下:,修饰符 interface 接口名 extends父接口名/接口体,13,接口的定义,例3-3Interface ObjectArea double PI=3.14;double area(double r);,注意:接口和普通类不一样的是它的方法默认是抽象和公共的,属性默认是常量,静态的和公共的,14,接口的实现,若一个类想统一在某个接口的规范下,想具有这个接口的”身份”,就需要实现这个接口。格式如下:,Class 类名 implements 接口名,接口的实现,15,例3-4class Circle implements ObjectAreapublic double area(double r)/重写return PI*r*r;,注意:若实现接口的类不是抽象类,则该类必须实现指定接口的所有抽象方法。方法头部应该与接口中的定义完全一致,即有完全相同的方法名、参数表和返回值。,16,接口继承,接口也可以通过关键字extends继承其他接口。子接口将继承父接口中所有的常量和抽象方法。,Interface 接口名 extends 接口名,接口继承,17,例3-5:interface AString a=接口A中常量;void showA();interface B extends AString b=接口B中常量;void showB();,interface C extends BString c=接口C中常量;void showC();class InterfaceABC implements Cpublic void showA()/重写A接口中的方法System.out.println(a);public void showB()/重写B接口中的方法System.out.println(b);public void showC()/重写C接口中的方法System.out.println(c);,实现多接口,18,一个类可以同时实现多个接口,接口名之间用逗号间隔。,例3-6:interface A void meth1();interface B void meth2();class MyClass implements A,B public void meth1()System.out.println(Implement meth1().);public void meth2()System.out.println(Implement meth2().);,19,任务实现,分析接口及类关系,创建接口,实现接口,创建对象,调用对象中的方法完成具体功能,20,课堂总结,抽象类的定义和继承接口的定义和实现,