黑马程序员技术交流社区

标题: Java语言中的继承与覆盖 [打印本页]

作者: chenhan123    时间: 2018-6-15 22:43
标题: Java语言中的继承与覆盖
Java语言中的继承与覆盖
继承的概念
面向对象的三大特征:封装性,继承性,多态性,继承是多态的前提,如果没有继承就没有多态.
程序当中继承是师徒之间的继承关系,大徒弟和小徒弟都会有继承主要解决的问题就是共性抽取,上层类别称为父类,基类或者超类下层叫子类,也叫派生类

继承当中的特点
1.子类可以拥有父类当中可继承的内容
2.子类也可以拥有自己特有的内容

格式:
继承关系中,子类就是一个父类,子类可以被当作是父类来看待,例如父类是员工,子类是程序员,程序员就是员工
定义父类名称(父类就是一个普通的类)
public class 父类名称{}
定义子类格式
public class 子类名称 extends父类名称{}


在父子类的继承关系中,如果成员变量重名,则创建子类对象时有两种访问方式
1.直接通过子类对象访问成员变量,等号左边是谁,就优先使用谁,没有则向上找
2.间接通过成员方法访问成员变量,调用的属于谁,就优先用谁,没有就向上找

如何处理成员变量,局部变量和父
子类当中的重名情况
本类局部变量   直接写  
本类的成员变量 this.变量名
父类的成员变量 super.变量名

方法调用重名规则
创建的对象是谁,就优先用谁,如果没有就向上找

注意事项:
无论是成员变量还是成员方法还是成员变量,都是由下而上,绝对不会由上而下

重写(覆盖)Override
概念:在继承关系中,方法的名称一样,参数列表也一样特点方法的覆盖特点,创建的是子类对象,则优先使用子类方法

覆盖重写注意事项
1.必须保证子类和父类当中的方法名和参数列表都相同才算是覆盖,写上@Override可以检测是否覆盖
2.子类方法中的返回值类型必须小于等于父类方法中的返回值范围.Object类是所有类的公共最高类,是祖宗类,位于继承关系的顶端
3.子类方法的的权限必须大于等于

父类方法的权限
小扩展提示:public>protected>(defalt)>private备注 default不是关键字,而是留空,什么都不写
继承中方法的覆盖重写应用场景例如手机功能升级设计原则:对于已经投入使用的类,尽量不要进行修改,推荐定义一个新的类,来继承重复利用其中共性的内容,并且添加新的内容
继承关系中构造方法的访问特点
1.子类构造方法当中有一个默认隐含的super();会默认调用父类的无参构造方法,并且先执行父类方法
2.子类构造可以通过super关键字来调用父类重载构造
3.super的父类构造调用,必须是子类方法的第一个语句,()第一个分号,不能一个子类构造调用多次super构造

总结:
子类必须调用父类的构造方法,不写则赠送super(),写了就用指定的super调用,uper只能有一个,还必须是第一个

super关键字三种用法
1.在子类的成员方法中,访问父类成员变量
2.在子类成员方法中,访问父类成员方法
3.在子类的构造方法中,访问父类的构造方法

this关键字的用法
super关键字用于访问父类内容,this关键字用来访问本类,用法也有三种
1.在本类成员方法中,访问本类中的成员变量
2.在本类的成员方法中访问本类的另一个成员方法,起到强调的作用
3.在本类的构造方法中,访问本类的另一个构造方法,格式this();
第三种用法当中要注意
A.this()调用也必须是构造方法中的第一个语句,并且唯一
B.super 和this 两种构造不能同时调用

java继承的三个特点
1.java预研是单继承的,一个类的直接父亲只能有唯一一个
2.java语言可以多级继承
3.一个子类的直接父类是唯一的,但是一个父亲可I有很多个子类,可以有很多兄弟姐妹

如果父类当中的方法不确定如何具体实现那么这就是一个抽象方法定义格式就是加上一个abstract ,然后去掉大括号直接分号结束,并且还要定义一个抽象类,在class之前加上一个abstract

抽象类和抽象方法的使用方法
1.不能直接new创建一个抽象对象
2.必须用一个子类来继承抽象类
3.这个子类必须覆盖重写抽象父类当中所有的抽象方法,覆盖重写(实现),去掉抽象方法的关键字abstract,然后补上大括号
4.创建子类对象进行使用抽象类

注意事项
1.抽象类不能直接创建对象
2.抽象类中可以有构造方法,是提供子类创建对象是,初始化父类成员使用的(通过系统正的super();来调用父类当中的方法)
3.(做了解)一个抽象类当中不一定含有抽象方法,只要保证抽象方法
所在的是抽象类就行,这样没有抽象方法的抽象类,也不能直接创建对象,在一些特殊情况下有用途.
4.(很重要)抽象类的子类,必须重写抽象父类的所有的抽象方法,否则或编译报错,除非该子类也是抽象类
5.抽象类当中可以有成员变量





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2