分享

Java学习——34、类的继承

 pythonjava学习 2021-04-06

面向对象四大特性:封装、继承、多态、抽象。

今天介绍继承。

继承是面向对象的核心特性,能够最大限度地实现代码复用。

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

学校:一中

年级:一年级

班级:一班

班主任:张老师

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多