java4对类的进一步讨论.pptVIP

  • 1
  • 0
  • 约2.37万字
  • 约 76页
  • 2017-06-08 发布于广东
  • 举报
java4对类的进一步讨论

其实,进行这样转换的唯一原因是:因为某些原因,该子类对象在 创建时就被一个父类引用所引用。 例如, Employee E1= (Employee)new Manager(); (也许,你这是为了首先能对经理完成某些与一般职员相同的处理。) 然而,现在需要重新将它转换成子类对象,如, if(E1 instanceof Manager) boss=(Manager)E1; (也许,你此时又想要对经理进行一些特殊的处理了!) 一般来说,你应该尽量少用这种转换。 5.3.3 对象作为方法参数时可用其子类对象作为参数。 例5-5 子类对象作为参数示例 class side//定义父类side { void disp(){ System.out.println(“平面图形”); } } class spot extends side //定义side的子类spot { private int x,y; spot(int u,int v){ x=u; y=v; } void disp(){ System.out.println(”点坐标:”+x+”,”+y); } } class line extends side//定义side的子类line {private int x1,y1, x2,y2; line(int u1, int v1, int u2, int v2 ){ x1=u1; y1=v1; x2=u2; y2=v2; } void disp(){ System.out.println(”起点坐标:”+x1+”,”+y1); System.out.println(”终点坐标:”+x2+”,”+y2); } } class ex_503 { static void show(side s){ s.disp(); } 运行结果: 点坐标:2,3 起点坐标:1,2 终点坐标:3,4 虽然,方法show要求的形参为side的对象引用,但实际调用时的实参都是其子类对象。这就意味着形参s实际引用的是其子类对象(如,sp、ln)。 因此,在运行时,方法show中的s.disp()实际调用的是sp.disp()和ln .disp()。 public static void main(String[] args) { sopt sp=new sopt(2,3); show(sp); line ln=new line(1,2,3,4); show(ln); } } 5.4 抽象类 5.4.1 抽象方法 所谓抽象方法是指:一个只有方法头而无方法体的方法。 即,只有访问权限、返回类型、方法名及参数列表,但无方法体。 JAVA规定:一个抽象方法前必须冠以关键字abstract。 如下两个方法均被声明为抽象方法: public abstract void show(); abstract int area(int a,int b); 注意:构造方法、静态方法、私有方法不能声明为抽象方法。 5.4.2 抽象类 抽象类是指:一个包含抽象方法的类。 JAVA规定:一个抽象类前必须冠以关键字abstract。如下两个类均被 声明为抽象类: public abstract class Person{ //必须包含抽象方法 } abstract class Side{ //必须包含抽象方法 } 关于抽象类的几点规定: (1)抽象类不允许被实例化。即,不能创建其对象。 换句话说,抽象类只能作为父类用于派生子类! (2)当子类继承抽象类时,若没有实现父类中的所有抽象方法,那么,这 个子类仍是一个抽象类。 (3)子类实现抽象方法时,不能改变其返回类型以及参数列表。 下面我们就先通过一个程序例子来了解抽象类的用法和作用。 由于雇员是一个人,学生是一个人。因此,你可以建立一个关于人、 雇员和学生的继承层次图。如下图所示: Person Student Employee 其中,类Person应该作为父类,而Employee、Student则为其子类。 这是因为,类Person显然更通用、更抽象,而类Employe

文档评论(0)

1亿VIP精品文档

相关文档