《08面向对象程序设计2-zw》由会员分享,可在线阅读,更多相关《08面向对象程序设计2-zw(39页珍藏版)》请在金锄头文库上搜索。
1、Softeem Consultancy Service面向对象程序设计2ID:SCSJ001-Java Basic Syntax1Softeem Consultancy Service课程目标类的继承 super关键字 对象造型 方法的覆盖(override) 多态实例2Softeem Consultancy Service类的继承面向对象最重要的特点之一,就是可以实现对类的复 用.通过“继承”一个现有的类,可以使用已经定义的类 中的方法和变量。 当一个类拥有另一个类的数据和操作时,就称这两个 类之间具有继承关系。被继承的类称为父类或超类, 继承了父类的所有数据和操作的类称为子类。 类的方法可
2、以被继承,但是类的构造器不能被继承。 使用继承的主要优点是,使得程序结构清晰,减少编 码,减少维护的工作量3Softeem Consultancy Service类的继承语法类继承的基本语法: class extends 在Java中,一个类只能继承一个父类,这种方式叫做单继承。这 一点和C+不一样。public class STStudent2 extends STStudent Main: STStudent2 stStu2 = new STStudent2(); stStu2.study();4Softeem Consultancy Service一切类的“祖先”Object在Java
3、中,所有的Java类都直接或间接地继承了 java.lang.Object类public class MyObject / public class MyObect extends Object / 在Eclipse中调用MyObject 对象的成员,会自动弹出继 承自Object的所有方法5Softeem Consultancy Service类的继承虽然一个类只可以继承一个父类,但是一个父类却可 以被多个子类所继承。从子类的角度看,它是“继承(extends)”父类;而 从父类的角度看,它是“派生(derive)”子类。它们 指的都是同一个动作,只是角度不同而已。6Softeem Cons
4、ultancy Service类的继承例子public class STStudent2 extends STStudent public void play() System.out.println(name + “-“ +getAge() + “ play.“); Main: STStudent2 stStu2 = new STStudent2(); stStu2.setName(“jack“); stStu2.examine(); stStu2.play(); 7Softeem Consultancy Service类的继承例子类的继承例子: public class Animal pr
5、otected int weight; public int getWeight() return weight; public void setWeight(int w) weight=w; 8Softeem Consultancy Service类的继承例子 public class Dog extends Animal /* *子类新增方法 */ public void bark() System.out.println(“WangWang“); 9Softeem Consultancy Service类的继承例子public class MyDog public static void
6、 main(String args)Dog myDog=new Dog(); myDog.setWeight(50); System.out.println(“My Dogs Weight is“ + myDog.getWeight(); myDog.Bark(); 10Softeem Consultancy Service生活中的继承 2-1 生活中,继承的例子随处可见动物食草动物食肉动物谁是父类? 谁是子类? 能说出继承的特点吗?继承需要符合的关系:is-a,父类更宽泛、子类更具体11Softeem Consultancy Service生活中的继承 2-2子类具有父类的一般性质(包括属性
7、和行为),以及自 身特殊的性质巴士是汽车吗? 卡车是汽车吗? 出租车是汽车吗?最大载客数量报站引擎数量 外观颜色 刹车 加速汽车最大载重量卸货所属公司 最大载客数量 打发票属性行为请问:出租车 包含哪些属性 和行为呢?12Softeem Consultancy Service为什么需要继承 4-1开发Softeem教师类,其中教员分为Java教师以及 .NET教师,各自的要求如下: Java教员属性:姓名、所属中心 方法:授课(步骤:打开Eclipse、实施理论课授课)、自我介 绍 .NET教员属性:姓名、所属中心 方法:授课(步骤:打开Visual studio 2005、实施理论课授课 )
8、、自我介绍13Softeem Consultancy Service请问:以下这个解决方案中存在着什么问题?为什么需要继承 4-2public class SofteemDotNetTeacher private String name; / 教员姓名 private String school; / 所在中心 public SofteemDotNetTeacher(String myName, String mySchool) name = myName; school = mySchool; public void giveLession() System.out.println(“启动
9、Visual Studio 2005“); System.out.println(“知识点讲解“); System.out.println(“总结提问“); public void introduction() System.out.println(“大家好!我是“ + school + “的“ + name + “.“); public class SofteemJavaTeacher private String name; / 教员姓名 private String school; / 所在中心 public SofteemJavaTeacher(String myName, Strin
10、g mySchool) name = myName; school = mySchool; public void giveLession() System.out.println(“启动 Eclipse“); System.out.println(“知识点讲解“); System.out.println(“总结提问“); public void introduction() System.out.println(“大家好!我是“ + school + “的“ + name + “.“); 代码存在重复,违背了“write once, only once”的原则 14Softeem Consu
11、ltancy Service为什么需要继承 4-3如何改进?有没有可能建立继承关系,让子类自动继承 父类的属性和方法?Java教员是教员吗? .NET教员是教员吗?public class SofteemTeacher private String name; / 教员姓名 private String school; / 所在中心 public SofteemTeacher(String myName, String mySchool) name = myName; school = mySchool; public void giveLession() System.out.println
12、(“知识点讲解“); System.out.println(“总结提问“); public void introduction() System.out.println(“大家好!我是“+ school + “的“ + name + “。 “); 现在,所有子类中相同的代码 都抽取到父类中了 属 性 行 为姓名 所在中心 授课 自我介绍教员Java教员.NET教员15Softeem Consultancy Service为什么需要继承 4-4public class SofteemJavaTeacher2 extends SofteemTeacher public SofteemJavaTea
13、cher2(String myName, String mySchool) super(myName, mySchool); public void giveLession() System.out.println(“启动 Eclipse“); super.giveLession(); public class SofteemDotNetTeacher2 extends SofteemTeacher public SofteemDotNetTeacher2(String myName, String mySchool) super(myName, mySchool); public void
14、giveLession() System.out.println(“启动 Visual Studio .NET“); super.giveLession(); 使用继承,可以有效实现代码复用子类自动继承父类的属性 和方法,子类中不再存在 重复代码16Softeem Consultancy Servicesuper 关键字在Java类中使用super来引用父类的成分 super可用于访问父类中定义的属性 super可用于调用父类中定义的成员方法 super的追溯不仅于直接父类 super可用于在子类构造器中调用父类的构 造器17Softeem Consultancy Servicesuper关键
15、字例子public class STStudent2 extends STStudent public void play() System.out.println(name + “-“ +getAge() + “ play.“); System.out.println(super.name + “-“ + super.getAge() + “ play.“); 加上: private String name = “student2“; 就不一样了18Softeem Consultancy Service调用父类构造器在子类的构造器中可使用语句super(argument_list) 调用父类的构造器public STStudent2(String code,String name) super(code,name); Main: stStu2 = new STStudent2(“001“,“admin“); stStu2.play();19Softeem Consultancy Service对象造型(Casting)所谓造型就是Java对象间的类型转换 Java的对象造型可以分为两种情况: 自动造型 (子类父类) 强