1、继承的意义
避免代码重复书写,便于维护。
2、注意事项
继承只能在类与类、接口与接口。
java类之间只接受单继承,不接受多继承,实现多个类的继承可以使用多层继承。
3、介绍
3.1 基本信息
继承:能够让一个类(子类)拥有另一个类(父类)的属性和方法。
关键字:extends
格式: public class 类名 extends 父类名{ }
子类是在父类的基础上,对属性或者方法进行扩展,得到新类别。
Object:是所有其他类的父类。
父类与子类之间是包含关系,父类只是针对于某个类而言的,此处作为父类,在他处也可以作为子类。
3.2 访问权限
继承某一个类,调用某一个类中的方法,都需要有对该类的访问权限
控制被修饰的内容能在哪些范围使用。
访问权限分为四类
当前类中 同一个包下的类 不同包下的子类 不同包下的非子类
public ok ok ok ok
protected ok ok ok
缺省 ok ok
private ok
子类能拥有父类的哪些属性和方法?
子类继承父类,能拥有父类所有的属性和方法。部分属性和方法限于访问权限,不能直接使用。
以老师辅导学生为例,将学生作为父类,向下划分下高中生,大学生。
先创建学生类,编写有关学生所拥有的属性
package extend;
public class Student{
//属性:姓名、性别、学号、年级
String name = 张三;
String sex;
String sno;
String grade;
public void study() {
System.out.println("学生在学习!" + name);
}
public static void main(String[] agrs){ \\添加主函数观察是否成功运行
Student stu = new Student();
stu.study();
}
结果为
创建大学生类继承学生类属性与方法
public class UNStudent extends Student{
public static void main(String[] args){
UNStudent unstu = new UNStudent();
unstu.study();
}
}
结果与学生类一致
此处可以调用
子类可以重写父类的学习方法
public class UNStudent extends Student{
public void study() {
//输出
System.out.println("我是大学生,不是普通学生。");
public static void main(String[] args){
UNStudent unstu = new UNStudent();
unstu.study();
}
}
``
结果变为
3.3 重写 和 转型
重写:父类的方法不能满足子类的需要,则子类可以重写父类的方法。
要求: 1、必须有继承关系。
2、父类的方法在子类中可见。
3、方法的声明,访问权限可以扩大,其他(返回值类型、方法名、参数)必须一致。
自动转型:子类对象可以自动的变为父类类型的对象。
自动转型后,方法的调用以子类为准。
即如果大学生类以继承学生类,此种写法等价于先前的写法。
Student unStu = new UNStudent();
按部就班构建高中生类、老师类
public class HStudent extends Student{
public void study(){
System.out.println("高中生要改变学习方法");
}
}
public class Teacher {
public void fudao(Student unstu,HStudent hstu){ \\对象名可以与主函数不同
unstu.study();
hstu.study();
}
调用主函数
public static void main(String[] args) {
Student unStu = new UNStudent();
HStudent hStu = new HStudent();
Teacher teacher = new Teacher();
teacher.fudao(unStu,hStu);
}
结果为