【黑马程序员】继承与多态(四)
来源:互联网 发布:夜梦巴黎 知乎 编辑:程序博客网 时间:2024/06/10 04:25
------------android培训、java培训、期待与您交流! ----------------
继承与多态
一、继承
①继承的作用:
I:提高代码复用性
II:让类与类之间产生了关系
注意:I:不能为了简单的获取其他类中的某些功能时就继承,必须是类与类中间存在关系才可以继承
II:父类中有private修饰的成员时,子类不能继承这些成员
②继承存在时成员的特点
I:成员变量:
1>如果子类中存在非私有的同名成员变量时,子类要访问本类的成员变量时应用this
2>如果子类中存在非私有的同名成员变量时,子类要访问父类的成员变量时应用super
II:成员方法:
1>子类覆盖父类方法时,不能有比父类更严格的访问权限
2>静态方法必须用静态方法覆盖
III:构造方法:
1>构造方法不存在覆盖
2>在对子类对象进行初始化时,父类构造函数也会运行
原因:子类的构造函数第一行会有一条隐式的语句 super()
3>子类访问父类构造方法的原因
父类非私有的数据子类可以直接获取,所以子类对象在初始化时,需要查看父类是如何对这些数据进行初始化的
4>如果要访问父类中指定的构造函数,则子类的构造函数中要手动定义super语句来指定
5>如果父类中没有空参构造函数,则在子类的构造函数中要手增加super语句来指定要访问的构造函数
6>子类的构造函数第一行可以手动指定this语句来访问本来中的构造函数,子类中至少会有一个构造函数会访问父类中的构造函数
注意:super语句一定要定义子类构造函数的第一行。
因此this语句与super语句只可能存在一个
示例:
public class DuoTaiTest {public static void main(String[] args) {//子类引用指向本类对象Student s = new Student(23);//父类引用指向子类对象Person p = new Student(22);System.out.println(p.name);s.eat();s.study();p.eat();}}class Person{String name;//父类空参构造函数public Person(){}//父类非空参构造函数public Person(String name) {super();this.name = name;}public void eat(){System.out.println(this.name+" "+"Person+++++eat");}}class Student extends Person{int age;//子类空参构造函数public Student(){}//子类非空参构造函数public Student(int age) {super("LI" );this.age = age;}//覆盖父类eat方法public void eat(){//子类调用父类成员方法super.eat();System.out.println(this.name+" "+"Studert+++++eat");}//本类study方法public void study(){System.out.println(this.name+" "+"Stundent++++sutdy");}}
运行结果:
LI
LI Person+++++eat
LI Studert+++++eat
LI Stundent++++sutdy
LI Person+++++eat
LI Studert+++++eat
二、多态
①多态的体现形式
I:父类引用指向了自己的子类对象
II:父类的引用也可以接受自己的子类对象
②多态的前提
I:必须是类与类之间存在关系,(继承或者实现)
II:必须存在覆盖
③多态的利与弊
利:多态的出现大大提高了程序的扩展性
弊:父类引用只能访问父类成员
④多态中成员函数的特点:
I:在编译时,参阅引用变量所述的类中,是否有调用的方法,如果有则编译通过,如果没有则编译失败
II:在运行时,参阅对象所述的类中是否又要调用的方法
I与II综述:成员方法在多态中调用时,编译参阅左边,运行参阅右边
III:在多态中成员变量的特点:无论编译或运行都参考左边
IV:在多态中,静态成员方法,不论编译或运行都参考左边
------------android培训、java培训、期待与您交流! ----------------
详细请查看:http://edu.csdn.net/heima
- 【黑马程序员】继承与多态(四)
- 黑马程序员:C#基础篇(四)抽象类、接口、继承与多态
- 黑马程序员_继承与多态
- 黑马程序员_多态与继承
- 黑马程序员_继承与多态
- 黑马程序员—继承与多态
- 黑马程序员--OC-多态与继承
- 黑马程序员-继承、接口与多态
- 黑马程序员—继承与多态
- 黑马程序员-面向对象(继承与多态)
- 黑马程序员—OC(继承与多态)
- 【黑马.Net程序员】C#继承与多态练习
- 黑马程序员-------java学习笔记之继承与多态
- 黑马程序员----继承、内部类与多态,包
- 黑马程序员-面向对象中的继承与多态
- 黑马程序员_Java 中的继承与多态
- 黑马程序员——封装,继承与多态
- 黑马程序员 之 Objective-C 继承与多态
- 在sql server数据库中快速删除记录,清空表
- 用vs2012时遇到的奇葩问题
- 大型互联网网站架构心得之一:分
- http://www.worldscientific.com/ 查高水平论文和检索的网站
- Unpack/repack ext4 Android system images
- 【黑马程序员】继承与多态(四)
- RHCE6 Preperation (10) - SMTP,NFS, boot parameter
- 程序标注
- hdu 5021 Revenge of kNN II(树状数组)
- iOS 5~7的模拟器下载
- 查找数据库里所有表当前的最大id
- Word Ladder
- vim 粘贴时取消自动换行
- SQL*Loader 详解