继承的基本概念
语法规则
[访问修饰符] class 子类名 extends 父类名{
子类成员变量;
子类成员方法;
}
1.子类可以继承父类的非私有属性和方法
2.子类可以添加自己的属性和方法
3.子类的构造方法可以调用父类的构造方法、使用super
关键字
4.Object
类是所有类的根类
5.Java中的类只支持单一继承,即每个类只有一个直接父类
6.子类可以成为其他类的父类,从而建立继承关系
继承关系
public class Father(){
public String name;
public int age;
public Father(){} //无参构造
public Father(String name, int age){ //有参构造
this.name =name;
this.age = age;
}
public void info(){
Sysyem.out.println("名字"+name+",年龄"+ age);
}
}
public class Son extends Father{ //Son这个子类继承了Father这个父类
private String school;
public Father(){} //无参构造
public Father(String school){
super(name,age); //调用父类的构造
this.school=school;
}
public void printSchool(){
system.out.println("School是"+school);
}
}
方法重写
在继承关系中,都是现有父类才有子类,当子类与父类的方法名相同,参数列表相同,返回值类型一致(不等于相同)时,子类的方法会覆盖父类的方法,此时调用父类的同名方法时只能调用到子类的此方法。例如:
public class Father(){
public String name;
public int age;
public Father(){} //无参构造
public Father(String name, int age){ //有参构造
this.name =name;
this.age = age;
}
public void info(){
Sysyem.out.println("名字"+name+",年龄"+ age);
}
}
public class Son extends Father{ //Son这个子类继承了Father这个父类
private String school;
public Father(){} //无参构造
public Father(String name , int age,String school){
super(name,age); //调用父类的构造
this.school=school;
}
public void printSchool(){
system.out.println("School是"+school);
}
public void info(){ //重写父类的方法
super.info(); //调用父类的方法
printSchool();
}
}
class Test{
public static void main(String[] args){
Son son = new Son("张三", 18,"kfm学校")
son.info(); //调用重写父类的方法
}
}
// 输出结果为:
// 名字 张三 年龄 18 学校 kfm学校
方法重写必须满足的要求:
1.重写方法与被重写方法必须有相同的方法名、参数列表
2.重写方法的返回值类型必须和被重写方法的返回值类型相同或是其子类
3.重写方法不能缩小被重写方法的访问权限
4.不能重写父类中的最终方法
5.不能用子类的静态方法重写父类的实例方法
父类的方法是是静态方法时,不能被重写,只能被覆盖,调用父类的方法是还是使用父类的方法
方法重载和方法重写的区别:
方法重载是在一个类中定义多个方法名相同但参数不同的方法,编译时多态
方法重写是在子类中重写父类的方法,方法名和参数都相同,运行时多态