目录
一 继承概念
继承机制:是面向对象程序设计使代码可以复用的最重要手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,然后代码复用。
简单来说,我们可以有一个父类,然后将若干子类中的共同性拿出来放在父类中,然后再由子类继承父类
//父类
class Person{
public String name;
int age;
public void eat(){
System.out.println(name+"正在吃饭");
}
}
//子类
class Teacher extends Person{
int wage;//工资
}
class Student extends Person{
int shoolnumber;//学号
}
上面代码中,有Teacher和Student类,然后有Person类将它们的共同点列了出来,比如名字,年龄和吃饭的动作,再由Teacher和Studen继承;这样Person就是Teacher和Studen的父类,它们就是Person的子类。
注意:
子类会将父类中的成员变量和成员方法继承到子类中;
子类继承父类之后,必须要新添加自己特有的成员,体系出于基类的不同,否则就没有必要继承了
二 访问优先级
在子类方法中或者通过子类对象去访问成员时:
如果访问的成员变量子类中有,优先访问自己的成员变量;
如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义,则编译报错;
如果访问的成员变量与父类中成员变量同名,则优先访问自己的。
遵循就近原则,自己有优先拿自己的,如果没有则向父类中去找
三 关键字super
super有三个作用:
1.访问父类的成员方法
2.访问父类的成员变量
3.调用父类的结构方法
代码如下:
//父类
class Persons{
public String name;
int age;
public void eat(){
System.out.println(name+"正在吃饭");
}
public Persons(String name,int age){
this.name = name;
this.age = age;
}
}
//子类
class Teacher extends Persons{
int wage;//工资
public Teacher(String name,int age){
super(name,age);//调用父类构造方法
super.age = age;//调用父类成员变量
super.name = name;
super.eat();//调用父类成员方法
}
}
注意:super调用父类构造方法时要将其放在方法中的第一行,否则就会出现编译错误
四 super和this的异同点
相同点:
1.都是java的关键字
2.只能在类的非静态方法中使用,用来访问非静态成员方法和字段
不同点:
1.this是当前对象的引用,当前对象即调用示例方法的对象,super相当于是子类对象中从父类继承下来的部分成员的引用
五 代码块等在父类和子类中的执行顺序
在继承层次上,先分别执行父类和子类的静态代码块,然后再执行父类的示例和父类的构造方法,最后执行子类的示例和子类的构造方法。
举例:
//父类
class Persons{
public String name;
int age;
public void eat(){
System.out.println(name+"正在吃饭");
}
public Persons(){
System.out.println("父类的构造方法");
}
static {
System.out.println("父类的静态代码块");
}
{
System.out.println("父类的示例代码块");
}
}
//子类
class Teacher extends Persons{
int wage;//工资
public Teacher(){
System.out.println("子类的构造方法");
}
static {
System.out.println("子类的静态代码块");
}
{
System.out.println("子类的示例代码块");
}
}
当我们用main方法去创造一个Teacher对象时结果如下:
六 继承方式
继承方式分为多层继承或者不同类继承同一个类,不可出现一个类继承多个类的情况