【文档说明】Java课件第章继承公开课.pptx,共(23)页,2.084 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-92600.html
以下为本文档部分文字说明:
Java程序设计课程第4章继承主讲人:刘新2014.11•内容安排第4章继承•继承是面向对象最重要的机制之一4.1继承的基本原理多边形椭圆形非封闭图形图形单一继承•继承可传递图形矩形四边形多边形正方形4.
1继承的基本原理父类,超类,基类子类,派生类•私有成员不可继承子类自动继承父类中所有可以继承的成员构造方法不可继承继承规则4.2子类对父类的继承•继承的关键字:extends4.2子类对父类的继承[类修饰符]class子类名extends父类名{类体}若未指定父类
,则默认父类为Object继承示例父类程序:Ancestor子类程序:Derive子类的子类:Grandson它有4种类型的成员它都能继承下来么?•1、改名字;2、不改名字,只改功能解决方案4.3属性的隐藏
和方法的覆盖如何解决同名冲突?•属性被隐藏时,有各种修饰符可能不同,如何处理?各类修饰符完全相同访问权限不同数据类型不同其他修饰符不同子类:HideMember_1子类:HideMember_2应用子类:UseHideMember_2子类:HideMember_3常量不同的子类:Hi
deMember_4静态不同的子类:HideMember_54.3.1属性的隐藏例子:一个公用的父类Ancestor•4.3.2方法的覆盖必须满足两个条件修饰符完全相同的覆盖示例:如果不同那是重载•4.3.2方法
的覆盖访问权限不相同公开的不再是秘密!返回类型不相同返回类型必相容!final修饰符不相同静态修饰符不相同final不可被覆盖!不可交叉覆盖!•构造方法不是成员方法,不会被继承!1、子类和父类的构造方法名称不同,
不可能被继承2、通过super来实现自动调用无参数的构造方法被自动调用4.4构造方法没有继承机制看上去很像继承但实际上不是•带参数的构造方法既不会继承也不会自动调用4.4构造方法没有继承机制不能编译成功,why?测试一下构造方法的执行顺序:总是会先调用父类无参方法•关键字:
super解决方案4.5super的使用super.变量名或super.方法名([参数列表])•super([参数列表])解决方案4.5super的使用只能出现在子类的构造方法中只能是第一条语句两个限制:•4.6继承的内部处理父类对象调用子类构造方法子类对象
隐藏的父类的任何成员都不会被复制到子类空间中!•[访问权限修饰符]interface接口名[extends父接口1,父接口2,...]{//定义成员变量[public][static][final]数据类型变量名=初始值;……//定义成员方法[public]
[abstract]返回类型方法名([参数列表]);}Java没有提供类的多重继承机制,转用接口来实现接口比类要简单得多!极大地降低了学习和使用难度4.7接口与多重继承学员职员在职学员•接口中所有的属性都是公共的静态常量接口中所有方法都是实例化的抽象方法接口
本身是抽象的接口中没有构造方法接口不能创建对象,但可以定义变量4.7接口与多重继承•接口单一继承示例:•接口多重继承示例:接口的多重继承•接口多重继承可能会出现冲突:•以关键字:implements来实现4.7.3接口的实现[类修饰符]class类名[ext
ends父类名][implements接口名1[,接口名2,...]]{//实现接口中的抽象方法public[返回值类型]方法名([参数表]){//方法体}}父接口:Colorable.java子接口:Paintable.
java父类:Point.java子类:ColoredPoint.java子类:PaintedPoint.java•4.8父类引用子类对象注意它会有运行时错误发生!publicclassBase{publicBase(){System.
out.println("Baseconstruct.");}}publicclassDerivedextendsBase{publicDerived(){System.out.println("Derivedconstruct.");}publicstaticvoidmain(S
tringargv[]){Baseoa=newDerived();//父类变量引用了子类对象,成功Derivedob;oa=newBase();ob=(Derived)oa;/强制转换再引用,编译可以通过。}}•
本章结束谢谢大家!•