第8章 继承、多型 继承 多型
第8章 • 继承、多型 – 继承 – 多型
扩充( extends)父类别 使用" extends"作为其扩充父类别的矢键词 public class bird i private string name; public Bird( public bird(string name) I this name name public void walk() i System.out. print1n("走路") public string getName()[ return name; public void setName(string name) i this name aime i
扩充(extends)父类别 • 使用"extends"作为其扩充父类别的关键词 public class Bird { private String name; public Bird() { } public Bird(String name) { this.name = name; } public void walk() { System.out.println("走路"); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
扩充( extends)父类别 pub1 ic class chickenextends bird{//扩充Bird类另 private string crest;//新增私有成员,鸡冠描迹 public Chicken()f super()i) //定义建构方法 public Chicken(String name, String crest)i super(name)i this crest cresti //新增方法 ublic void setCrest(string crest) t this crest crest public String getcrest()i return cresti public void wu()i System.out. print1n("咕咕叫.");
扩充(extends)父类别 public class Chickenextends Bird { //扩充Bird类别 private String crest; //新增私有成员,鸡冠描述 public Chicken() {super(); } //定义建构方法 public Chicken(String name, String crest) { super(name); this.crest = crest; } //新增方法 public void setCrest(String crest) { this.crest = crest; } public String getCrest() { return crest; } public void wu() { System.out.println("咕咕叫…"); } }
扩充( extends)父类别 Chicken chicken1= new Chicken("小克","红色小鸡冠"); Chicken chicken new Chicken(i System.out. printf("小雞1-名称号s,鸡冠是号s。\n", chicken getName(), chicken. getcrest ())i chicken. wu() System. out.printf("小雞2-名称号s,鸡冠是号s。\n", chicken getName(), chicken. getcrest())i chicken. wu()i
扩充(extends)父类别 Chicken chicken1 = new Chicken("小克","红色小鸡冠"); Chicken chicken2 = new Chicken(); System.out.printf("小雞1 -名称%s,鸡冠是%s。\n", chicken1.getName(), chicken1.getCrest()); chicken1.wu(); System.out.printf("小雞2 -名称%s,鸡冠是%s。\n", chicken2.getName(), chicken2.getCrest()); chicken2.wu();
被保护的( protected)成员 保护意思表禾存取该成员是有条件限制的 继承的类别就可以直接使用这些成员,但 这些成员仍然受到保护 °不同套件( package)的对象不可直接呼叫 使用 protected成员
被保护的(protected)成员 • 保护意思表示存取该成员是有条件限制的 • 继承的类别就可以直接使用这些成员,但 这些成员仍然受到保护 • 不同套件(package)的对象不可直接呼叫 使用protected成员
被保护的( protected)成员 public class Rectangle //受保护的 member protected int xi protected int yi protected int width protected int height public class Cubicextends Rectangle i public int getvolumn() //可以直接使用父类别中的 width丶 height成员 return length* width*height
被保护的(protected)成员 public class Rectangle { //受保护的member protected int x; protected int y; protected int width; protected int height; … } public class CubicextendsRectangle { … public int getVolumn() { //可以直接使用父类别中的width、height成员 return length*width*height; } }
重新定义( Override)方法 如果父类别中的定义并不符合您的需求, 可以在扩充类别的同时重新定义 ·可以重新定义方法的实作内容、成员的访 问权限,或是成员的返回值型态
重新定义(Override)方法 • 如果父类别中的定义并不符合您的需求, 可以在扩充类别的同时重新定义 • 可以重新定义方法的实作内容、成员的访 问权限,或是成员的返回值型态
重新定义( Override)方法 public class simplearray i protected int[] array public SimpleArray (int i)t array= new int[i]氵 public void setTlement(int i, int data) t array [i data public class SafeArrayextends simpleArray i //重新定义setE1 ement() public void setElementint i, int data)( if(i< arraylength) super setTlement(i data)i
重新定义(Override)方法 public class SimpleArray { protected int[] array; public SimpleArray(int i) { array = new int[i]; } public void setElement(int i, int data) { array[i] = data; } .... } public class SafeArrayextends SimpleArray { … //重新定义setElement() public void setElement(int i, int data) { if(i < array.length) super.setElement(i, data); } .... }
重新定义( Override)方法 实际运作的对象是 Safe Array的实例,所以 被呼叫执行的会是 SafeArray中重新定义过 的 setTlement0方法 Simp leArray simpleArray new SafeArray ( simpleArray. setTlement()i
重新定义(Override)方法 SimpleArray simpleArray = new SafeArray(); simpleArray.setElement(); • 实际运作的对象是SafeArray的实例,所以 被呼叫执行的会是SafeArray中重新定义过 的setElement()方法
重新定义( Override)方法 在衍生类别中想要呼叫基类的建构方法 可以使用 super0方法 要在衍生类别中呼叫基类方法,则可以如 使用 super methodName 条件限制 父类别中的方法或建构方法不能是" private" 也就是不能是私用成员
重新定义(Override)方法 • 在衍生类别中想要呼叫基类的建构方法, 可以使用super()方法 • 要在衍生类别中呼叫基类方法,则可以如 使用super.methodName() • 条件限制 – 父类别中的方法或建构方法不能是"private", 也就是不能是私用成员