什么是继承
在java中,定义了很明显的父子级类型,我们在创建不同类的时候可以很方便地利用继承关系快速创建类。
继承(Extend)的本质是,子类复制了父类所有的方法。
子类可以通过关键字extends快速继承一个父类,而无需对父类的代码进行复制(如果复制,对于后期的维护将是艰难的)。这样就在类型之间做到了一种代码复用。示例:
public class Person{
//定义了一个类
}
public Student extends Person{
//定义了一个类,继承自Person类
}
继承关系下的扩展
子类继承父类的主要目的是对父类进行扩展,在扩展过程中大部分情况需要访问父类的字段,由于大多数情况下父类的字段都是用访问修饰符“privite"修饰,因此其他类无法访问,但是java设计了一种继承树内访问字段的方法,即”protected“,解决了该问题。
public class Person{
//定义了一个类
protected String name;
protected int age;
}
public Student extends Person{
//定义了一个类,继承自Person类
public void setName(String name){
this.name = name;
}
}
继承关系中的构造方法
在java类的关系中,构造方法是绕不过去的一道坎,所有的新的定义必须充分考虑与其构造方法是否冲突或引起不便。在父类中,一般设置了父类的构造方法,在子类中,一般需要手动调用父类的构造方法,使用*super()*即可完成对父类构造方法的调用。
public class Person{
//定义了一个类
protected String name;
protected int age;
public Person(String name){
this.name = name;
}
}
public Student extends Person{
//定义了一个类,继承自Person类
public Student(name){
super(name);
}
}
}
向上转型
java允许一个变量指向一个实例对象,这个变量一般是和实例是一种类型的(暂时可以这么理解),但是通常情况下,为了处理方便,不引起混乱,我们希望变量之间的差别越小越好,这就需要对变量进行抽象化,因此就引出一个概念:向上转型。
顾名思义,向上转型就是将一个对象(变量)升级到了更高维度(抽象),比如,一个变量p本来属于“人”这个类,它指向一个实例“小明”,表示为p–>小明,现在对人进行向上转型,转为更抽象的类型“哺乳动物”,用变量b表示。显然可以认为小明也是一种哺乳动物,可以给小明一个变量名b,即b–>小明。