面向对象的第二大特点就是继承:而继承的主要作用在于,在已有基础上继续进行功能的扩充。
一. 继承问题的引出
如果要想更好的解析继承的作用,下面按照之前所学习到的概念来定义两个类:人类、学生类。那么现在的定义效果如下:
class Person {
private String name ;
private int age ;
public void setName(String name) {
this.name = name ;
}
public void setAge(int age) {
this.age = age ;
}
public String getName() {
return this.name ;
}
public int getAge() {
return this.age ;
}
}
class Student {
private String name ;
private int age ;
private String school ;
public void setName(String name) {
this.name = name ;
}
public void setAge(int age) {
this.age = age ;
}
public String getName() {
return this.name ;
}
public int getAge() {
return this.age ;
}
public void setSchool(String school) {
this.school = school ;
}
public String getSchool() {
return this.school ;
}
}
发现Student类具备Person类中的所有属性,两个简单Java类中存在大量的重复内容。
二. 继承的实现
在Java之中继承使用extends关键字来进行实现,其定义的语法如下:
●继承关系:class 子类 extends 父类;
|-子类在一些书上也被称为派生类;
|-父类也被称为超类(Super Class)。
继承可以进行父类功能的扩充,并且最重要的是可以重用父类中定义的方法。
三. 继承使用限制
虽然从本质上来讲继承子类可以对父类操作进行共享,但是从另外一个角度来说,继承本身也是存在有一些限制的。
1. 子类对象在进行实例化前一定会首先实例化父类对象,默认调用父类的构造方法后,再调用子类的构造方法进行子类对象实例化。
●必须先有老子,才有后代;
class Person {
public Person() {
System.out.println("*** Person类对象创建 ***") ;
}
}
class Student extends Person {
public Student() {
//super() ; // 此语句在无参时写与不写一样,有的时候一定得放在首行,类似于this()。
System.out.println("*** Student类对象创建 ***") ;
}
}
public class MeDemo {
public static void main (String args[]) {
new Student() ; //进行子类对象实例化
}
}
发现没有任何一条语句会明确调用父类构造,但是父类构造依然被执行了,所以就证明,子类对象的实例化一定会同时实例化其父类对象。
但是同时需要注意的是,如果此时你的父类里面没有提供有无参构造,那么这个时候就必须使用super()明确的指明你的父类构造方法。
2. Java中只允许单继承,不允许多继承;
一个子类只能继承一个父类;
范例: 错误继承方式
class A {}
class B {}
class C extends A,B {}
实际上这个时候的C类要同时继承A和B类的主要目的是为了同时拥有A和B类中的操作,所以为了实现这样的概念可以采用多层继承的形式完成。
class A {}
class B extends A {}
class C extends B {}
但是这个层不建议太多了。一般我们自己在建立类的时候,这些类的继承关系也就最多是三层。
Tips:Java不允许多重继承,但是允许多层继承。
3. 在进行继承的时候,子类会继承父类的所有结构,但是这个时候需要注意的是,所有的非私有操作属于显式继承(可以直接调用),而所有的私有操作属于隐式继承(通过其他形式调用,例如:setter、getter)。
此时父类中的属性的确被子类所继承了,但是发现子类能够使用的只是所有的非private操作(public),而所有的private操作肯定无法直接使用,所以称为隐式继承。
总结:
①继承的语法以及继承的目的(扩展已有类的功能,使代码重用);
②子类对象的实例化流程:不管如何操作一定哟啊首先实例化父类对象,而后再实例化子类对象;
③继承的限制:不允许多重继承,只允许多层继承。
网友评论