010Java继承
来源:互联网 发布:资生堂红色蜜露 知乎 编辑:程序博客网 时间:2024/05/17 06:26
继承
1.1泛化的过程:指子类共享父类的数据
1.2extends关键字:在Java中实现类的继承,子类可以继承父类的成员变量和成员方法,如图下:
由上图得:子类Tetromino通过extends继承父类Tetromino,由于父类已经定义Cell类型,长度为4的数组,因而子类可以直接使用cells数组,同时子类也继承了弗雷德所有方法
注意:Java中只能一个子类集成一个父类(单继承),但一个父类可以有多个子类
1.3继承中的构造方法:调用子类的构造方法,Java默认先调用弗雷德无参构造方法,例如图下:
由上图得,子类构造方法如果没有super()语句,系统会默认的加入一个无参的父类的构造函数,从而保证了初始化继承父类的成员变量。
注意:当父类没有无参构造函数时&&有参数的构造函数情况下,系统会认定发生编译错误,如图下:
由上图得,Goo的构造函数会调用谷类的无参构造函数,则发生了编译错误。
针对这种情况,我们可以显示的调用父类的构造方法,用super语句,如图下:
由上图得,super(value),显示的调用了父类的构造方法
1.4父类引用指向子类的对象:一个子类的对象可以向上造型为父类的对象,如图下
父类引用obj指向了子类Goo对象,但是obj只能访问父类定义的成员,不能访问子类新添加的部分,如图
由上图得,上述代码中会发生编译错误,因obj.num=5;obj.g();都调用了子类扩展的部分。而在Java编译器中,编译器会认为obj为父类类型,如若不是,则发生编译错误。而不是看引用指向的类型
1.5方法中的重写:在继承中,子类可以重写(覆盖)父类的方法,即子类和父类的方法名和参数列表都相同,只是方法体不同而已,当重写方法被调用时,无论是子类或者父类的引用,运行的都是重写后的版本如图下:
由上图,运行结果都是Goo.f()因而,无论子类引用或者父类的引用都指向重写后的方法
1.6重写中使用super关键字:在重写方法中,可用super关键字,调用父类的版本如图下:
由上图得,通过super.f();调用父类方法,常用于在父类的基础上进行扩展
1.7重写和重载的区别
重载:指在一个类中,方法名相同,参数列表不同,编译器在编译时根据参数列表的不同绑定想应的方法
重写:指在子类中,签名相同,即方法名和参数列表都相同,在程序运行时,根据对象的类型绑定相应的方法
如图下:
由上图得:先通过Goo类中进行重载,然后同过obj.f(),进行重写
结果:g(Super)sus.f()
- 010Java继承
- Java继承
- JAVA-继承
- java 继承
- Java继承
- Java 继承
- JAVA继承
- java继承
- java/继承
- java 继承
- java继承
- java继承
- JAVA-继承
- Java继承
- java 继承
- JAVA 继承
- 【继承】 JAVA
- Java继承
- 大端序和小端序
- HTTP Keep Alive分析与优化总结
- ggplot2作图详解:映射(mapping)
- jdk,jre,jvm的区别
- Ubuntu 服务器基本配置
- 010Java继承
- 黑马程序员-程序编译错误总结01
- ggplot2作图详解:ggplot图形对象
- 工作日时间表
- Android 手势检测实战 打造支持缩放平移的图片预览效果(下)
- poj 1845 Sumdiv (大数幂取模)
- linux 最简单的模块的编写和运行
- Android横竖屏切换
- ggplot2作图详解:分面(faceting)