面向对象编程进阶1

面向对象编程进阶1

ID:39765035

大小:2.31 MB

页数:74页

时间:2019-07-11

面向对象编程进阶1_第1页
面向对象编程进阶1_第2页
面向对象编程进阶1_第3页
面向对象编程进阶1_第4页
面向对象编程进阶1_第5页
资源描述:

《面向对象编程进阶1》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第5章面向对象编程进阶主要内容类的继承1多态性2静态初始化块3final修饰符4面向对象编程的三大特征:封装、继承和多态。主要内容5抽象类6接口7内部类8匿名类5.1类的继承人是哺乳动物,因为人都具有哺乳动物的所有特征,但哺乳动物却不一定是人。哺乳动物类和人类之间就存在继承关系(IS-A)。mammalsdogscatshumanslionstigersleopards5.1类的继承继承是面向对象三大特征之一,也是实现软件复用的重要手段。继承的特点通过继承,在已有类型基础之上进行扩充或改造,得到新的数据类型。已有

2、的类型称为父类或超类。得到的新数据类型,称为子类或派生类类的继承提高了程序代码的重用性和可扩充性,缩短了软件开发的周期。5.1类的继承继承的分类 单继承---------子类只能有一个直接父类 多重继承------子类可以有多个直接父类类A类B类C类A类BJava不支持多重继承5.1类的继承子类继承父类的语法格式[修饰符]class子类名extends父类名{//子类代码部分}例5.1编写程序示范子类继承父类的特点。publicclassAnimal{publicdoubleweight;publicvoidea

3、t(){System.out.println("动物在吃东西");}}扩展(继承)5.1类的继承publicclassDogextendsAnimal{publicvoidsay(){System.out.pringln(“狗叫:汪汪汪”);}publicstaticvoidmain(String[]args){Dogd=newDog();d.weight=150;d.eat();d.say();}}Dog类中没有定义weight属性和eat方法,是从父类Animal中继承下来,并且访问权限没有发生变化如果定义J

4、ava类时并未显示指定这个类的直接父类,则这个类默认扩展java.lang.Object类5.1类的继承重写父类的方法子类扩展父类--总是以父类为基础,额外增加新的属性和方法。但有一种情况例外:子类需要重写父类的方法。例5.2子类重写父类的方法publicclassBird{publicvoidfly(){System.out.println("我在飞");}}5.1类的继承publicclassOstrichextendsBird{//重写Bird类的fly方法----方法覆盖(override)publicv

5、oidfly(){System.out.println("我只能在地上奔跑");}publicstaticvoidmain(String[]args){Ostrichos=newOstrich();os.fly();//调用的是Bird的fly还是Ostrich的fly?}}重写父类方法5.1类的继承方法重写时要遵循的规则:“两同两小一大”规则“两同”即方法名相同,形参列表相同;“两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;“一大

6、”指的子类方法的访问权限应比父类方法更大或相等;覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。5.1类的继承方法重写和方法重载的区别覆盖是子类和父类之间的关系;而重载是同一类内部多个方法之间的关系。覆盖一般是两个方法间的,而重载可能有多个重载的方法。覆盖的方法有相同的方法名和形参表;而重载的方法只能有相同的方法名,不能有相同的形参表。覆盖时根据调用它的对象来区分方法;而重载是根据形参表来决定调用的是哪个方法。5.1类的继承父类实例的super引用如果需要在子类方法中调用父

7、类被覆盖的实例方法,可以用super作为调用者来调用父类被覆盖的实例方法。publicclassOstrichextendsBird{……//子类中原有的内容publicvoidcallOverridedMethod(){super.fly();//输出“我在飞”}……}在子类中想调用父类被覆盖的方法fly可以通过super关键字实现5.1类的继承注意:super是Java提供的一个关键字,它是直接父类对象的默认引用。正如this不能出现在static修饰的方法中一样,super也不能出现在static的方法中如

8、果子类定义了和父类同名的属性,也会发生子类属性覆盖父类属性的情形。子类的方法直接访问该属性时,都会访问到覆盖属性,无法访问父类被覆盖的属性---通过super来访问父类被覆盖的属性例5.3子类属性覆盖父类属性的实例。如果我们在某个方法中访问名为a的属性,但没有显示指定调用者,系统查找a的顺序为:查找该方法中是否有名为a的局部变量查找当前类中是否包含名为a的属性查找a的直接

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。