一、继承
1、为什么有继承
简单来说,我们在描述两个有相同点和不同点对象的时候,比如梨子和苹果,它们都是甜的,有很多汁水的,富含维生素的,但是它们长的不一样,价格不一样,如果用Java语言来描述它们,可以看到有很多相同代码,这些重复的代码浪费了时间,有没有一个把它们的相同点写在一起,而在分别描述它们的时候可以直接应用的方法呢。这就是继承。
2、继承概念
继承机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用。
3、继承的语法
在java中要表示类之间的关系,要用到extends关键字
修饰符 class 子类 extends 父类{ } |
注意:
子类会将父类中的成员变量或者成员方法继承到子类中;
子类继承父类之后,必须要新添加自己特有的成员,体现出与基类的不同。
4、父类成员访问
★子类中访问父类的成员变量
●子类和父类不存在同名成员变量
●子类和父类成员变量同名
成员变量访问遵循就近原则,自己有则优先自己的,如果没有则向父类中找
在子类方法中 或者 通过子类对象访问成员时:
1. 如果访问的成员变量子类中有,优先访问自己的成员变量。
2. 如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义,则编译报错。 3.如果访问的成员变量与父类中成员变量同名,则优先访问自己的。
★子类中访问父类的成员方法
●成员方法名字不同
在子类方法中或者通过子类对象访问方法时,则优先访问自己的,自己没有是再到父类中查找,如果父类中也没有则报错
5、super关键字
作用:在子类方法中明确访问父类的成员(有时子类和父类会有相同名字的成员)
注意:
1.super关键字只代表当前对象内部的那一块父类特征,不包含在子类。
2.只能在非静态方法中使用
3.使用super(),必须在构造方法的第一行。
4.super只能指代当前类的父类,不能指代父类的父类。
6、super和this
相同点:
1.都是Java中的关键字
2.只能在类的非静态方法中使用,用来访问非静态成员方法和字段
3.在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在
不同点:
1.this是当前对象的引用,当前对象即调用实例方法的对象,super相当于是子类对象中从父类继承下来部分成员的引用。
2.构造方法中一定会存在super()......的调用,用户没有写编译器也会增加,但是this()....不会去。
3.在非静态方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性。