Class relationship(类的天系) °继承关系( nheritance Relationships) 如何让一个类继承另一个类的成员 接口关系( interfaces) 如何让一个类支持特定的行为 包级关系( Packaging) 如何将类的对象构成逻辑分组 嵌套关系( Inner classes 如何将一个类的声明嵌入另一个类的声明中
Class Relationships (类的关系) • 继承关系(Inheritance Relationships) 如何让一个类继承另一个类的成员 • 接口关系(Interfaces) 如何让一个类支持特定的行为 • 包级关系(Packaging) 如何将类的对象构成逻辑分组 • 嵌套关系(Inner Classes) 如何将一个类的声明嵌入另一个类的声明中
Why need extending elasses' 对真实世界中对象继承关系的支持,满 足面向对象建模技术的需要 对面向对象程序设计语言中对象多态性 ( Polymorphisn的实现 代码复用的一种形式
Why need extending classes? • 对真实世界中对象继承关系的支持,满 足面向对象建模技术的需要 • 对面向对象程序设计语言中对象多态性 (Polymorphism)的实现 • 代码复用的一种形式
class Animal public float weight; public void eat(i.. 则必须满品两个冬供 Cat mycat=new Cato mycat weight=5.5 class Mammal extends AnimaL public int heartrate d mycat. heartRate-80: mycat.long ha -true, public void breath(.. s mycat eatO mycat. breathe, mycat purr; class Cat extends MammaR boolean longHair; 先类中声明的所有p public void purr(0{…}
How to extend a class? • 如果要声明类B继承类A,则必须满足两个条件: (1) 类A非final (2) 类A是public或类B与类A同包, 如果满足条件则可按照以下的语法声明类B: <修饰符> class B extends A { …… } • 类B称为类A的子类(subclass),类A称为类B的父类 或基类(superclass),称类A的父类或父类的父类为 类B的祖先(ancestor) • 子类将拥有在其父类和祖先类中声明的所有public 或protected的成员 class Animal{ public float weight; public void eat(){…} } class Mammal extends Animal{ public int heartRate; public void breath(){…} } class Cat extends Mammal{ boolean longHair; public void purr(){…} } Cat mycat=new Cat(); mycat.weight=5.5; mycat.heartRate=80; mycat.longHair=true; mycat.eat(); mycat.breath(); mycat.purr();
class Ai Classes and Obie static int sfa=100 static void smaf.. 在M中类被表示为一块imtt=10 名和类的静态成员,可以月 int fb==100 类名 void ma(i. Some class static field1 域区方法区 static field2 static field3 A static method1 sfa100 sfb1000 static method2 sma
Classes and Objects in JVM • 在JVM中类被表示为一块内存区域,分别存放类 名和类的静态成员,可以用以下的图形表示: SomeClass static field1 static method1 static field2 static field3 static method2 类名 域 区 方 法 区 class A{ static int sfa=100; static int sfb=1000; static void sma(){…} int fa=10; int fb=100; void ma(){…} } A sfb sma 1000 …… …… sfa 100
Classes and obia ralenew AO: Ara2=ral; 在JM中对象也被表示为一块内存区域,分别存 放到对象所属类的引用和对象的成!可以用以 下的图形表示 类的 引用 classen A ral field1 域区方法 field2 ra2 . A field3 fa 10 fb100 method1 ma method2
Classes and Objects in JVM • 在JVM中对象也被表示为一块内存区域,分别存 放到对象所属类的引用和对象的成员,可以用以 下的图形表示: :classRef field1 method1 field2 field3 method2 类的 引用 域 区 方 法 区 A ra1=new A(); A ra2=ra1; ra1 ra2 A :A fb ma 100 …… …… fa 10