收藏 分享(赏)

java继承.ppt

上传人:hwpkd79526 文档编号:8315631 上传时间:2019-06-20 格式:PPT 页数:27 大小:239KB
下载 相关 举报
java继承.ppt_第1页
第1页 / 共27页
java继承.ppt_第2页
第2页 / 共27页
java继承.ppt_第3页
第3页 / 共27页
java继承.ppt_第4页
第4页 / 共27页
java继承.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、第四章继承,继承,就是儿子继承父亲,父亲有的儿子也有,而自由的父亲却可能没有。在java中继承是面向对象的一种特性。可以认为他是分层次的一种手段。就像父亲有儿子,儿子有儿子,这样代代延续下去。引入继承可以减少重复的代码量,提高代码和开发的效率。,继承,继承变量 继承方法 Super关键字 继承中的构造方法 重写 初始化 上溯下溯 Final关键字 抽象类 接口 接口和抽象类的区别,继承的简单例子,class Father int i=4;public void show()System.out.println(“父类“); class Son extends Fatherint j=5;pub

2、lic void get()System.out.println(“子类“); 这里是一个简单的例子,java重的继承是子类继承父类的关系。被继承的类叫做父类或者超类;而继承父类的类叫做子类。如这里的Father叫做超类或者父类,而继承Father类的Son叫做子类。,继承,Java中的继承是单继承,也就是说一个子类只能有一个超类。同时一个超类却可以有多个子类,而且子类也可以当作下一个子类的超类。,父亲,儿子,孙子1,继承,继承,孙子2,继承,继承,继承语句格式 父类 Class FatherNamecode 子类 Class SonName extends FatherNamesoncode

3、 是的这里用extends来表示继承关系。像上面的那几个例子都是这样的。,继承,继承中成员的访问 1.如果父类中变量定义成了private私有变量,则在子类中是不可以调用的,其只能在父类的方法中调用,子类和其他类都不可以。 class Father private int m=2; class Son extends Fatherint k=m; 这样编译就通不过,如果把父类中修饰符private去掉,即可。,关于类成员的修饰符,变量前面和private同性质的修饰符有protected,default(缺省),和public。他们一共有四种。Private修饰的变量只能被本类使用。,继承的s

4、uper关键字,Super关键字,可以用来子类调用父类的成员用,它包括调用父类的public、protectd修饰的变量,方法等等 。 int sh=i;i是父类中的public变量int sm=super.i; 这两种方法在子类中都可以调用父类中变量。int i=i;(这样会显示变量未被初始化)当子类中定义与父类中相同的变量时,会将父类中相应的变量覆盖。因此用super即可完成相应的要求。 Int i=super.i;这样就可以了。,Super关键字,调用父类的方法super.父类的方法(this则是在同各类中调用构造方法也放首句) 同时super也可以调用父类的构造方法,但是父类中构造方法

5、用private修饰时,不能有子类去继承。 子类可以没有构造方法,他会调用父类的构造方法,如果父类也没有他会调用默认的构造方法。其父类继承object类的构造方法。 在子类中可以调用父类的构造方法,super必须放在子类构造方法的的首句。,继承,将子类引用赋给父类,这有点像上溯,不过上溯将在以后会介绍到。 Father ff=new Son();ff.show();为父类自己的方法错ff.sshow();子类中的方法(这是不可以调用的) 子类引用赋给父类后,父类的对象只可以调用父类中自己的变量和方法。,上溯和下溯,上溯就是将子类对象的引用赋给父类,父类只能调用自己的变量和方法;而下溯则是将父类

6、的引用给子类对象,子类对象可以调用父类和该子类的变量和方法。 上溯可以用在抽象类和接口中,这在以后会具体的介绍。范例:Father a=new Son();a.i;a.show(); 注意:上溯会失去子类的新增变量和新增方法。就是不能操作他们。但是可以通过在下溯转型后又可以调用子类中新增的变量方法同时也可以调用子类重写的父类方法,这是子类中重写的方法会覆盖父类中的方法。 注意:不要将父类创建的对象和子类的上溯转型对象相混。因为父类创建的对象调用的方法,即使是子类中有重写的,他也是调用父类的中原有的方法;但是上溯转型对象则是调用子类中重写的方法,这是两者的区别。,下溯,下溯是将父类引用给子类。范

7、例:Father ff=new Son();ff.show();/ff.sshow();Son ss=(Son)new Father();ss.sshow(); 这样编译通过,但运行时显示不可以转化。既不能将父类对象直接赋值给子类的声明。Father ff=new Son();ff.show();/ff.sshow();Son ss=(Son)ff;ss.sshow();这样正确。即是先上溯在下溯转型。,方法的重写,子类继承父类,子类可以调用父类的方法,同时子类也可以重写父类中方法,来实现和父类中不同的业务处理逻辑。 重写要求子类中方法与父类中的方法方法名称相同,参数相同,类型相同。当子类调用

8、该方法时,超类中的方法则被覆盖。 注意:重写和上溯有些相同点,因为上溯调用父类中方法时若子类中有重写,则会调用子类方法覆盖父类自己的方法;重写则是子类调用子类中重写的父类的方法。 重写重载都是类的多态性的表现。重写是继承中多类的体现,而重载则是单个类中多态性的体现。,继承方法的重写,当子类继承父类时,重写父类的方法时,如果父类的相应的方法有异常,那字类重写时,要注意重写方法的异常应该是父类方法中异常本身,或者是其异常的子类,或者不抛异常,不然会报错误。,类的初始化,类的初始化当类加载时,先对实例域初始化为缺省值-再执行实例块-执行构造方法如果实例块在初始化之前,则初始化之后将覆盖实例块语句,否

9、则依次执行。private Father(int i)this.i=i+2;int i=4;int m=2;i和m的值初始化为缺省值0,0;之后执行i=4,m=2;然后执行构造方法,将i穿进去,类成员变量i被赋值;,继承中的初始化,初始化父类中的静态代码-初始化子类中的静态代码-初始化父类中的非静态代码-初始化父类构造方法-初始化子类中的非静态代码-初始化子类中的构造方法,Final的使用,Final关键字修饰的内容是不容许改变的 修饰变量,变量为常量final int PRICE=7; 变量名大写 必须被初始化 不容许被修改 final int i=4;i=2;错误 修饰方法,方法不容许重写

10、;编译通过,但是运行是会提示final修饰的方法,不容许重写修饰类,类不容许被继承,String字符串类就是这样的例子。同样编译也通过,但运行时也会提示final修饰的类不容许被继承。 注意:与finally异常中finally中代码都会执行,与finalize垃圾回收机制相区别。 同时对于变量,方法,类如果我们不希望他们分别被重新赋值,重写,继承,那么我们可以将他们声明成final型。,抽象类,抽象类,是一种特殊的类,她是一种声明了未实现方法的类,用abstract修饰。 抽象类中有一个或者多个抽象的方法,其抽象的方法只有方法首,没有方法体。不能实例化,可能有main方法 形式:public

11、 abstract void show();(注意有分号) 抽象类不可以直接new,它可以通过其实现了他的非抽象子类来进行上溯类型转换。 抽象类中同时也可以有非抽象的方法,属性变量等等。 当抽象的方法一定要在抽象类中。 public Abstract class className,抽象类,实例化抽象类是不可能的,只能通过其非抽象子类进行向上转型。 当其子类继承时,只要实现其抽象方法即可,非抽象的方法可以直接调用,和普通继承中方法一样使用。 抽象类可以继承实体类,抽象类注意事项,抽象类中抽象方法不能用static、final修饰方法,因为抽象方法是被继承重写的,如果方法体不能够被实现,则这样是

12、无意义的。 抽象类中一些在子类中要用到的变量不能用private,final修饰。 抽象类的类访问权限是abstarct 构造方法、类成员方法不能够被声明为抽象方法 抽象类中不一定有抽象方法,但是抽象方法一定存在于抽象类中。 子类一定要实现抽象方法,不然子类也要声明成抽象类。,接口,我们可以从类的实现中抽取出一个或者若干个方法,将它们抽象只剩于方法首。这样的抽象我们把它叫做接口,用interface修饰。 接口其实只是指明要去做什么,但是具体怎么做他却没有要求我们。因此这中面向对象接口编程给我们提供了很多的好处,因为他不考虑中间过程,只注重与结果。,接口,接口格式: Java中声明接口的语法如

13、下:public interface接口名extends父接口名列表 /接口体/常量域声明public static final 域类型域名常量值;/抽象方法声明public abstract native 返回值方法名(参数列表)throw 异常列表; 就像抽象类一样,接口中的方法也是只有方法首和分号而无方法体的。 而类实现接口class className implements InterfaceList 完成接口中的方法体; 同时类可以实现多接口,接口之间只需要用逗号隔开。如class className implements 接口1,接口2.,接口,接口可以继承接口,可以继承多个接口

14、interface peoplepublic void set(); interface customer extends peoplepublic void show();public void get(); 实现customer接口的类必须要实现其所有接口中的方法体,不然就应该声明成抽象类,接口里的变量,接口里的变量必须是public static final的 ,即使是我们没这么声明,他往往也是默认这种形式。而且变量名称要大些如: Public static final PRICE=3; 而且声明的同时就要赋值,因为static,final(变量值不可以改变),接口,接口不能实例化,但是

15、可以通过实现接口的非抽象类上溯类型转化,将引用传递给接口。如: Ipeople pp =new Test();pp.set(); 在接口中抽象方法中抛出异常,而且完成的方法体,其方法首抛出的异常也必须和接口中的异常相同或者是其子类异常。,接口注意事项,接口是一个纯的抽象类。接口的语法为interface interfaceName。 接口中包含的方法全部为public abstract修饰的方法,其均没有方法体。 接口中定义的属性全部为public static final修饰的属性,其均为常量。 接口实现通过implements关键字。实现类必须重写接口中所有的方法,否则只 能将接口的实现类

16、必须声明为抽象类。 接口可以继承接口,通过extends关键字实现,且可以继承多个接口,逗号分开。 接口中的方法不能被static、native、strictfp、final关键字修饰。 接口不能继承其他的类。 注意:接口中的方法和常量可以有下面的声明方式(全部合法)见备注。 如果有两个接口中有同样的方法只是返回至不同,一个类都实现了这两个接口,编译是就像重载一样,会提示有两个相同的方法。,接口和抽象类的区别,抽象类和接口 1.抽象类是单继承;接口对于类来说可以多实现,同时接口可以继承多个接口 2.抽象类中可以有非抽象的方法和变量,实现他的类可以直接调用,抽象方法必须完成方法体;接口有只有抽象的方法和静态常量(不可以被改变),实现它的类必须完成接口中的方法,不然就要声明成抽象类 3.抽象类可以继承实例类,接口只是对于多个接口可以实现继承 4.抽象类和接口都不能实例化,但是可以同过继承抽象类的非抽象类,实现接口的非抽象类来进行上溯类型转化。 5抽象类可以定义构造器;而接口不行,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报