§5.2.4继承关系(Generalization)的UML图 People 如果一个类是另一个 he ight:double 类的子类,那么ML通过 weightdouble 使用一个实线连接两个 tellHeightAndWeight ()void 类的UM图来表示二者之 Student 间的继承关系,实线的 number:int 起始端是子类的UML图, add(int,int):int sub(int,int):int 终点端是父类的UML图, 公 但终点端使用一个空心 UniverStudent 的三角形表示实线的结 multi (int,int):int 束。 div(double.double):double 图5.2继承关系的UL图 2025/4/2 18
2025/4/2 18 §5.2.4 继承关系(Generalization)的UML图 如果一个类是另一个 类的子类,那么UML通过 使用一个实线连接两个 类的UML图来表示二者之 间的继承关系,实线的 起始端是子类的UML图, 终点端是父类的UML图, 但终点端使用一个空心 的三角形表示实线的结 束
§5.2.5 关于instanceof运算符 instanceof.运算符是Java独有的运算符号。 instanceof是双目运算符,其左面的操作元是对象 右面的操作元是类,当左面的操作元是右面的类或子类 所创建的对象时,instanceof:运算的结果是true,否则 是falseo 对于例5-1中的People、Student和UniverStudent类,如果 zhang和zhaoqiang分别是Student和UniverStudent创建的对象, 那么zhaogiang instanceof People zhaoqiang instanceof Student zhang instanceof Student zhang instanceof People4个表达式的结果都是true, 而 zhang instanceof UniverStudent;:表达式的结果是false
19 §5.2.5 instanceof instanceof Java 。 instanceof instanceof true false 对于例5-1中的People、Student和UniverStudent类,如果 zhang和zhaoqiang分别是Student和UniverStudent创建的对象, 那么 zhaoqiang instanceof People zhaoqiang instanceof Student zhang instanceof Student zhang instanceof People 4个表达式的结果都是true, 而 zhang instanceof UniverStudent;表达式的结果是false
§5.3子类对象的特点 当用子类的构造方法创建一个子类的对象时,不仅 子类中声明的成员变量被分配了内存,而且父类的成员 变量也都分配了内存空间,但只将其中一部分作为分配 给子类对象的变量。也就是说,父类中的private成员变 量尽管分配了内存空间,也不作为子类对象的变量,即 子类不继承父类的私有成员变量。同样,如果子类和父 类不在同一包中,尽管父类的友好成员变量分配了内存 空间,但也不作为子类的成员变量,即如果子类和父类 不在同一包中,子类不继承父类的友好成员变量, 2025/4/2 20
2025/4/2 20 §5.3 private
例题5-2A.iava,B.iava,Examples52.iava public class A public class B extends A private int x; double y=12; public void setX(int x){ public void setY(int y) this.x=x; 1his.yy+x罪法,子类没有继承x public int getx(){ public double getY({ return x; return y; public class Example5 2{ public static void main(String args[]){ Bb=new BO; b.setX(888); System.out.println("子类对象未继承的x的值是:"+b.getX()); b.y=12.678; System.out.println("子类对象的实例变量y的值是:"+b.getY(O):
21 例题5-2 A.java , B.java , Example5_2.java public class A { private int x; public void setX(int x) { this.x=x; } public int getX() { return x; } } public class B extendsA { double y=12; public void setY(int y) { //this.y=y+x; 非法,子类没有继承x } public double getY() { return y; } } public class Example5_2 { public static void main(String args[]) { B b=new B(); b.setX(888); System.out.println("子类对象未继承的x的值是:"+b.getX()); b.y=12.678; System.out.println("子类对象的实例变量y的值是:"+b.getY()); } }
例题5-2 C:\ch5>java Example5_2 子类对象未继承的x的值是:888 A.ava, 子类对象的实例变量的值是:12.678 B.java, Example5 2.java 图53子类对象调用方法 例5-2中,子类对象调用继承的方法 操作这些未被子类继承却分配了内存 空间的变量。程序运行效果如图5.3 所示。 2025/4/2 22
2025/4/2 22 例题5-2 A.java , B.java , Example5_2.java 例5-2中,子类对象调用继承的方法 操作这些未被子类继承却分配了内存 空间的变量。程序运行效果如图5.3 所示