类的继承是类的一个重要概念,通过类的继承子类可以继承父类的属性和方法,提高代码的复用性。
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关键字修饰方法,则方法不可被重写。