java继承
在Java中定义一个类时,让该类通过关键字extends继承一个已有的类,这就是类的继承(泛化)。被继承的类称为父类(超类,父类),新的类称为子类(派生类)。子类继承父类的所有属性和方法,同时也可以增加自己的属性和方法。Java中只能单继承,也就是说每个类只能有一个直接父类;一个父类可以有多个子类。 Java语言中,类的继承的声明格式是:
在继承关系中:
1、子类可以得到父类的属性和方法,这是从父类继承来的;
2、子类可以添加新的属性和方法,添加父类所没有的;
3、子类可以重新定义父类的属性和方法,修改父类的属性和方法,为自己所用
创建子类对象时,当调用子类的构造方法时,必须先调用父类的构造方法,如果子类的构造方法中没有调用父类的构造方法,则编译器会默认在子类的构造方法中的第一句加上super()来调用父类的默认无参构造方法,如果父类中没有无参的构造方法,则系统编译出错。
在创建子类对象时,它首先调用父类的构造方法,然后运行实例变量和静态变量的初始化器,最后才运行构造方法本身。默认情况下,会调用父类无参的构造方法。
public class Test_32_继承 {
public static void main(String[] args) {
Worker_32 w=new Worker_32();//Worker是继承Employee的子类
w.name="tom";
w.birth="1991-10-07";
w.salary=50000;
w.getDetail();
w.getSalary();
System.out.println("allowance is "+w.dressAllowabce());
}
}
class Employee_32{
String name;
String birth;
double salary;
Employee_32(int a){
System.out.println("Employee_32()");
}
public void getDetail() {
System.out.println("name="+name+",birth="+birth);
}
public double getSalary() {
System.out.println("salary="+salary);
return salary;
}
}
class Worker_32 extends Employee_32{//重载Employee类
Worker_32(){
super(8);//父类没有无参构造器,不写super(8)会默认调用父类无参构造器,会报错
System.out.println("Worker_32()");
}
public double dressAllowabce() {
double allowance=200;
return allowance;
}
}
上述代码会先执行父类的构造方法,先输出Employee_32()然后调用子类自己的构造方法,输出Worker_32()
子类将从父类中继承下来的方法重新实现,叫做覆盖(Overriding)或重写(rewrite),方法覆盖的原因是父类中对应方法的行为不适合子类的需要,因此在子类中进行相应的调整。 覆盖(Overriding)是对从父类中继承来的方法进行改造,在子类继承父类时发生,在子类中的覆盖方法与父类中被覆盖的方法应具有:
1、相同的方法名
2、相同的参数列表(参数数量、参数类型、参数顺序都要相同) 3、相同的返回值类型
4、子类覆盖方法的访问权限要不小于父类中被覆盖方法的访问权限