JAVa4_2继承多态-访问控制.ppt

  1. 1、本文档共47页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JAVa4_2继承多态-访问控制

Java类设计 本节内容 类的继承 (1) 类的继承 (2) 类的继承 (3) extends 关键字 类的继承 (4) 单继承举例 域的继承与隐藏、添加 域的继承:子类可以继承父类的所有域(只要该域没有private或static修饰) 域的隐藏:子类重新定义一个与父类那里继承来的域变量完全相同的变量,称为域的隐藏 域的添加:定义子类时加上新的域变量 访问控制符(P65) 类的访问控制符 类的访问控制符或者为public,或者默认 public class 类名{ …… } 如果类用public修饰,则该类可以被其他类所访问 如果类默认访问控制符,则该类只能被同包中的类访问 成员访问控制举例(1) 成员访问控制举例(2) Ex1( 课后练习) 改造上述应用程序后,分析其结果,体会Java访问控制机制,可分下述几种情形: 应用程序入口main()方法定义在一个非子类中 Parent和Child类位于不同包中,main()在子类中 Parent和Child类位于不同包中, main()方法定义在不同包内的非子类中 方法的重写(覆盖) 在子类中可以根据需要对从父类中继承来的方法进行改造----方法的重写 重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型 重写方法不能使用比被重写方法更严格的访问权限 方法重写举例(1) 方法重写举例(2) 子类当中的构造方法 子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法 使用super关键字 关键字super 在Java类中使用super来引用父类的成员 super可用于访问父类中定义的属性 super可用于调用父类中定义的成员方法 super可用于在子类构造方法中调用父类的构造方法 关键字super举例 调用父类构造方法举例 (1) 调用父类构造方法举例 (2) 调用本类或者父类构造方法 使用this来调用本类的构造方法 使用super(argument_list)语句调用父类的构造方法 如果子类的构造方法中没有使用super显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法,相当于super() 如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错 super()必须在构造方法的第一行 对象构造和初始化细节 分配子类的存储空间并进行默认的变量初始化 按下述步骤初始化实例变量 绑定构造方法参数如有this()语句,则调用相应的重载构造方法, super()显式调用父类的构造方法 既无super也无this,隐式调用super() 进行实例变量的显式初始化操作 执行当前构造方法的方法体 构造和初始化对象举例 父类和子类的构造机理* 在内存机制中,父类和子类是占用同一块内存的,只不过子类在父类的基础上增加了自己的部分(属性)。子类是依附于父类的,先有父类再有子类。 一个子类对象的产生,必须先调用父类的构造方法产生一个父类实例,然后在这个实例基础上添加自己的部分。 子类改写了父类的方法,看似父类和子类各自有一个方法,其实它们在内存模型里占用的是同一块内存,子类方法会覆盖父类方法。 举例:StringTest.java Father01.java 父类对象与子类对象的转换 转换规则: 子类对象可以被视为其父类的一个对象 父类对象不能被当作其某个子类的对象 如果一个方法的形式参数定义的是父类对象,那么调用这个方法时,可以使用子类对象作为实际参数 如果父类对象引用指向的实际是一个子类对象,那么这个父类对象的引用可以用强制类型转换成子类对象的引用 // student.java: class Person{ //父类 ... } class Student extends Person { //子类 ... public static void main (String args[]){ Person p1 = new Person (Liming,50); Student s1 = new Student (Wangqiang,20,PKU); Person p2 = new Student (Zhangyi,18,dlut); Student s2 = (Student) p2; } } 多态性 实验 覆盖方法可以比父类访问控制权限更大 参数不同,不为覆盖方法。 返回类型不同,编译出错。 final 方法不能覆盖,编译出错 static 不为覆盖为各自的类方法。 private 不存在覆盖问题,因为子类见不到父类的私有方法。父类为public 子类为private 可以吗? 域覆盖如

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档