Java学习——34、类的继承
面向对象四大特性:封装、继承、多态、抽象。
今天介绍继承。
继承是面向对象的核心特性,能够最大限度地实现代码复用。
1、 由继承派生类
继承允许在已有类的基础上创建新类。
创建的新类叫做子类(或派生类),已有类称为父类(或祖先类)。
子类将自动拥有父类的全部成员。
使用关键字extends表示继承。其语法格式如下:
【修饰符】 class 类【extends 父类】
Java中的类是单继承的,一个类只能继承一个父类。
例:Person类为人类,Student类为学生类,很明显,学生类是可以继承人类的,因为学生首先是一个人。
//Person类
class Person{
private String name;//姓名
public Person(){
name="张熹熹";
}
public String getName(){
returnname;
}
}
//Student类
publicclass Student extends Person{
privateintnumber;//学号
public Student(){
number=123;
}
publicvoid show(){
System.out.println("姓名:"+getName()+"\n学号:"+ number);
}
publicstaticvoid main(String args[]){
Student s=new Student();
s.show();
}
}
其运行结果如下:
姓名:张熹熹
学号:123
从本例可以发现,Student类在声明对象s时,是会同时为对象s的姓名和学生赋值的,而对象s在调用show()方法时,也是可以显示s的姓名的。因为在定义类时用了Student extends Person一行,表示将Person中的所有成员继承至Student类中。
2、 继承原则
(1) 子类继承父类所有的成员变量,包括实例成员和静态成员;
(2) 构造方法和析构方法不被继承;
(3) 子类可以增加成员,可以重定义从父类继承来的成员,但不能删除它们。
3、 子类对父类成员的访问权限
子类对父类继承来的成员并不都有访问权限,现说明如下。
(1) 子类不能访问父类的私有成员
(2) 子类能够访问父类的公有成员和保护成员
(3) 子类对父类的缺省权限成员的访问控制,分为两种情况:当父类在当前包中,可以访问父类的缺省权限成员;当父类不在当前包中,则不能访问父类的缺省权限成员。
4、 简单例题
声明midStudent类,继承Student类。
其完整代码如下:
//人类
class Person{
protected String name;//姓名
public Person(){
name="张熹熹";
}
public Person(Stringname){
this.name=name;
}
}
//学生类,继承自人类
class Student extends Person{
privateintnumber;//学号
public Student(){
number=123;
}
publicvoid show(){
System.out.println("姓名:"+name+"\n学号:"+ number);
}
}
//中学生类,继承自学生类
publicclass midStudent extends Student{
private String grade,school,banji;//年级、学校、班级
private String teacher;//班主任
public midStudent(){
grade="一年级";
school="一中";
banji="一班";
teacher="张老师";
}
public midStudent(String grade, String school, Stringbanji,String teacher){
this.grade=grade;
this.school=school;
this.banji=banji;
this.teacher=teacher;
}
publicvoid display(){
super.show();//用super访问父类中的方法
System.out.println("学校:"+school+"\n年级:"+grade+"\n班级:"+banji+"\n班主任:"+teacher);
}
publicstaticvoid main(String args[]){
midStudent mid=new midStudent();
mid.display();
}
}
其运行结果如下:
姓名:张熹熹
学号:123
学校:一中
年级:一年级
班级:一班
班主任:张老师