- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java 课程part5
第5部分: 类的继承 2010 类的关系 继承类的原因 JVM中的类与对象 子类的构造方法 引用类型的兼容性 类型测试 方法的覆盖机制 super关键字 final修饰符的用途 抽象类与抽象方法 公共基类java.lang.Object类 equals方法与hashCode方法 Class Relationships (类的关系) 继承关系 (Inheritance Relationships) 如何让一个类继承另一个类的成员 接口关系 (Interfaces) 如何让一个类支持特定的行为 包级关系 (Packaging) 如何将类的对象构成逻辑分组 嵌套关系 (Inner Classes) 如何将一个类的声明嵌入另一个类的声明中 Why need extending classes? 对真实世界中对象继承关系的支持,满足面向对象建模技术的需要 对面向对象程序设计语言中对象多态性(Polymorphism)的实现 代码复用的一种形式 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(); 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 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 class B extends A{ static int sfb=100; int fb=10; void ma(){…} } A ra1=new A(); B rb1=new B(); ra1=rb1; B A/sfb sma 1000 …… …… A/sfa 100 B/sfb 100 A A/sfb sma 1000 …… …… A/sfa 100 :B A/fb ma 100 …… …… A/fa 10 B/fb 10 :A fb ma 100 …… …… fa 10 ra1 rb1 Constructors in Subclasses 子类对象的成员初始化之前必须完成父类或祖先类对象的成员的初始化,初始化的方式有两种:隐式初始化和显式初始化 隐式初始化:当父类提供了默认的构造函数,且子类的构造函数中没有显式调用父类的其它构造函数,则在执行子类的构造函数之前会自动执行父类的构造函数,直到执行完Object的构造
文档评论(0)