类的继承是类的一个重要概念,通过类的继承子类可以继承父类的属性和方法,提高代码的复用性。

eg:

//**

*创建一个父类Teacher,父类有两个属性name,age,两个方法sleep(),teach()

*

*/

class Teacher{

public String name;

public int age;

public void sleep(){

System.out.println("老师会睡觉");

}

public void teach(){

System.out.println("老师会讲课");

}

}

//**

*JavaTeacher类继承Teacher类,并有自己独有的方法eye()

class JavaTeacher extends Teacher{

public void eye(){

System.out.println("java老师戴眼镜");

}

}

如上所示,JavaTeacher类继承了Teacher类,这样通过继承JavaTeacher类就拥有了Teacher类的两个属性name,age,两个方法sleep(),teach()。除了继承父类的属性和方法,子类还可以创建自己的方法和属性。

1.private在类中的使用

子类只能继承父类的非private属性和方法。需要指出的是,用private修饰方法不常见,毕竟若果是private,则对外不能使用,是没有意义的(需要指出的是单例模式,就是通过用private把构造器私有化实现的)。如果父类的属性被私有化,则子类可以通过get/set方法间接调用。

eg:

//用private修饰name属性

class Teacher{

private String name;

public void setName(String name){

this.name=name;

}

public String getName(){

return name;

}

}

//JavaTeacher类继承Teacher类

class JavaTeacher extends Teacher{

}

public class TeacherDemo{

public static void main(String[] args){

JavaTeacher jt=new JavaTeacher();

jt.setName("网名“);

jt.getName();

}

2.super用法

在创建一个子类对象时,首先调用父类构造器创建一个父类对象,然后调用子类构造器创造一个子类对象。

父类中如果没有带有参数的构造器时,会默认调用父类的默认无参数构造器,无论这个无参数构造器是否显式显示。

父类中如果有带有参数的构造器时,如果默认无参数构造器不显式显示,则会覆盖,子类创建时不会默认调用

当父类只存在带有参数的构造器时,子类的构造器必须有该父类构造器。

2.1.调用父类的默认构造器

class Parent{

}

class Son extends Parent{

 son(){

super()//调用父类的默认构造器,super()也可以不写,默认调用

system.out.println("这是子类构造器");

}

}

2.2当有带有参数的构造器时,不会默认调用

 

class Parent{

Parent(String name){

}

}

class Son extends Parent{

 son(){

super()//这事由于父类默认构造器被覆盖,不可调用,不管是显示还是隐式

super(name);//需要调用父类的带有参数的构造器,并且父类构造器必须写在第一行

system.out.println("这是子类构造器");

}

}

2.3当父类无参数构造器被写明时,子类构造器可以调用

 

class Parent{

Parent(){

}

Parent(String name){

}

}

class Son extends Parent{

 son(){

super()//由于父类无参数构造器被显式写明,所以子类构造器可以调用,该调用可以是显式的和隐式的

system.out.println("这是子类构造器");

}

}

3.final关键字

final关键字修饰类,则类不可继承。

final关键字修饰属性,则属性不可修改。常用与修饰常量。如:

public static final doule pi=3.14;

final关键字修饰方法,则方法不可被重写。