前面了解了类与对象,今天来了解继承,所谓继承和现实中继承遗产可不一样,但是既然叫做继承,实际也和继承遗产有类似的,只不过是类与类之间而已
一.继承的定义
在介绍类的时候我们知道了类是具有相同属性和方法的一个集合,如果是集合就有包含关系,我们在写程序时候也不愿意麻烦,就像对象我们只要去实例化类,而不是每一个对象都去写一下它的方法属性,而对于有些包含另一个类的类我们也不愿重新去写原来的属性的方法,我们就选择了继承,继承也就是让一个类(子类)拥有另一个类(父类)的属性和方法
在Java中继承的关键字:extends
格式:Public class 子类类名 extends 父类类名{}
例:如果大学生类(CoStudent)想继承学生类(Student)
public class CoStudent extends Student{}
二.继承在java中的注意事项
Java 不支持多继承但支持多重继承
1.访问权限
在说到继承,我们就应该会想子类是不是完全继承父类的所有属性和方法,在这里我们就来了解一下访问权限
在Java中有这样几个访问权限:public、private、default(一般省略)、protected
1.private:Java中对于访问权限限制的最窄的修饰符,一般称为“私有的”。被修饰的属性和方法只能被该类的对象访问,其子类不能访问,更不用提跨包访问了
2.default:即不加任何访问修饰符,通常称为“默认访问权限”或者“包访问权限”。该模式下,只允许在同一个包中进行访问。
3.public:Java语言中访问权限最宽的修饰符,一般称之为“公共的”。被其修饰的类,属性及方法不仅可以跨类访问,而且允许跨包访问。
4.protected:介于public和private之间的一种访问修饰符,一般称为“保护访问权限”。被其修饰的属性以及方法只能被类本身的方法以及子类访问,即使子类在不同包中也可以访问。
权限 | 类内 | 同包 | 不同包子类 | 不同包非子类 |
---|---|---|---|---|
private | √ | × | × | × |
default | √ | √ | × | × |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
2.重写
父类方法不满足子类需要时,子类则可以重写父类的方法,但是也有几部分需要注意:
1.必须要有继承关系
2.方法的声明,除了访问权限可以扩大,其他(返回值类型,方法名,参数)必须完全一样
自动转型:
子类可以自动的变为父类类型,自动转型后,方法的调用以子类为准
例:
public class Student{
//性别、学号、班级、年级属性
public String sex;
protected String sno;
String banji;
private String grade ="未知";
//学习方法
public void study() {
//输出
System.out.println("学生的学习方法!"+grade);
}
}
//HSstudent继承Student
public class HStudent extends Student{
}
public class Teacher {
//督促学生学习的方法
public void ducu(Student stu) {
//让学生学习
stu.study();
}
}
//UNStudent是Student的子类
public class UNStudent extends Student{
//专业
public String major;
//重写父类的学习方法
public void study() {
//输出
System.out.println("我是大学生的学习方法,和学生不再一样!");
}
//主方法
public static void main(String[] args) {
//创建一个大学生对象
UNStudent unStu = new UNStudent();
//创建老师对象
Teacher teacher = new Teacher();
HStudent hStu = new HStudent();
teacher.ducu(unStu);
teacher.ducu(hStu);
}
}
如上运行结果为:我是大学生的学习方法,和学生不再一样!
学生的学习方法!未知