——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
继承
我们写一个Student类,再写一个Teachar类,再写一个Worker类 ,但是发现,每一个类中都相同的属性,年龄,姓名,性别等等。我们每一次都要在每个类中写这样的属性,这样提高了代码的成本,这样我们就想如果把这些相同的属性提取出来,然后要用的时候就提取出来。java为我们提供了一种机制来解决这个问题。这个机制叫做继承。
概述
继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和成员方法。若类B继承类A,则属于B的对象便具有类A的全部或部分性质(数据属性)和功能(操作),我们称被继承的类A为基类、父类或超类,而称继承类B为A的派生类或子类。
特点&特点
提供代码的复用性。
子类可以访问父类中非私有的属性和行为.
让类与类之间产生关系—是多态的前提。
java中的类只支持单继承,不继承多继承(但java提供了多层(重)继承来解决继承多个类)。
继承的格式
子类(派生类) extends 父类(基类、超类){}
class person{
String name;
int age;
public void speak(){
System.out.print(age);
}
}
class Student extends person{
public static void main(String[] args){
new Student().speak();
}
}
子父类中的关系
子父类中的成员变量的关系
通过子类访问一个成员变量的时候
A 首先在局部成员中找。
B 再在当前的成员变量。
C 最后在父类的中找,如果有就调用。
D 如果没有找到就报错
输出相同的变量时
输出局部变量就直接输出。 输出成员变量在成员变量中加this关键字 输出父类中的变量时,在变量钱加关键字super 子类访问不到父类中的局部变量
public void speak(){
int num=10;
System.out.println(num);//这里输出局部变量的值
System.out.println(this.num);//这里输出成员变量的值
System.out.println(super.num);//这里输出父类中的值
}
子父类中成员方法调用问题
子类中出现父类中一摸一样的方法,会覆盖父类中的方法,这种称为重写,注意:父类调用这个方法,调重用的还是自己的方法,子类调用的是重写的方法。简单理解就是自己调用自己。
父类中的私有方法不可以被重写,
子类静态方法只能重写父类静态方法(其实这个不算对象的关系);
覆盖应用:当子类需要父类的功能而子类特有方法时,子类可以用 super.父类的方法名 来调养,就可以重写一个即有父类的功能又有子类特有的方法
public void call(){
super.call()
System.out.println(“我是子类特点的方法”);
}
面试题
方法重载和方法重写的区别
方法重写:返回值,参数都必须一样。修饰符的权限必须大于等于父类修饰符权限。
方法的重载
在同一的类中,方法名相同,参数列表不同,与返回类型无关
继承中的构造关系
子类中的构造方法都会去访问了父类的无惨参构造方法: 在子类中的构造方法中都有一行默认语句:super();
因为子类会自动具备非私有数据,那么这个数据先去父类先调用构造方法初始化。
如果在构造方法中手动给出this()或super()的话这2个代码一定要放在第行有效代码。
如果父类中没有无参构造方法,可以再子类中手动添加super(有参)来访问父类的有参构造方法。
super的特点
super和this用法很像,this代表本类的对象而super代表父类的内存空间的标识(可以理解为父类对象的引用)。 this和super的使用:
成员变量
this.变量—当前类的变量
super.变量—父类中的变量
构造方法
this(参数)–本类的构造方法
super(参数)–父类的构造方法
成员方法
this.方法名—本类中的方法
super.方法名—父类中的方法
注意:
当在类中自己定义了一个有参的构造函数那么jvm就不会自动给你生成默认的无参的构造函数了。
当生成一个新的子类对象时,系统会自动调用父类的无参的构造函数,除非你明确的指出指向其他的构造函数,否则一定用调用无参构造函数,(如果没有无参构造函数那么系统就会抛出异常),
当想调用父类的有参的构造函数是,你可以直接使用super关键字直接指明即可。
什么时候用继承
如:定义个人类,定义个学生类,学生肯定是人的一种,所以我们要用学生类继承人类由于体现以种关系,什么是什么的一种,如学生是人的一种。那么久适合定义继承,不要为了某个功能就随便继承,如果为了某个功能new 一个对象就可以了。如一个人类继承动物类,这样就不合适,但是也可以继承。