JAVA入门基础文章3-类的概念-什么是继承

来源:互联网 发布:成都电视台网络直播 编辑:程序博客网 时间:2024/05/17 09:29

类的继承是一个及其重要的概念。

什么是类的继承?
继承就是从已有的类中派生出新的类,让新类拥有父类中已经有的东西,比如属性、方法等。

用一个例子说话。
前面一直用的一个类:Person。它代表了“人”
我们还可以定义很多本质上是“人”的类,比如:中国人、老师、工人、学生、母亲、女儿 ….. 不胜枚举。
这些东东,都可以继承与“人”,因为他们有拥有“人”的属性,比如:姓名、年龄、性别、爱好。

下面以老师为例子,我们再定义一个类:

public class Teacher{    private String name;    private int age;    private String sex;    private String favorite;    private String emp_code;//教师编号    private String zhicheng;//职称    private String course;//教学课程    //接下来写一堆set/get方法,用于访问属性。为了节省篇幅,我就不写了    //定义了一个方法:向别人介绍自己    public void introduceToSomeone(String someone){        System.out.println("hello " + someone + ", my name is " + this.name + ", I like " + this.favorite);        System.out.println("I have working 10 years, and my age is " + age);        System.out.println("I am teaching " + course);    }}

现在仔细看看这个类,它里面很多属性是不是和Person里面的属性一样,比如都有name/age/sex/favorite。
因为老师本质上是一个人,所以,人有的属性,老师当然应该同样拥有。

从代码的角度上,有什么办法能让“老师”“继承”于“人”,从而拥有人的属性,这样老师就不用重复编写这些代码了呢
这个办法就是使用JAVA里面的“继承”:

public class Teacher extends Person{    private String emp_code;//教师编号    private String zhicheng;//职称    private String course;//教学课程    //接下来写一堆set/get方法,用于访问属性。为了节省篇幅,我就不写了    //定义了一个方法:向别人介绍自己    public void introduceToSomeone(String someone){        sayHi(someone);        System.out.println("I have working 10 years, and my age is " + age);        System.out.println("I am teaching " + course);    }}

看看修改后的代码,与原来的代码有什么区别。
仔细看,一共有三处区别。
……
……
……
……
……
……
等着你琢磨这些区别……
……
……
……
……
……
……
现在,告诉我,这三处不同是什么?

实际上,如果你把这段代码放到eclipse中,会出现一个错误:The field Person.age is not visible。
你再琢磨一下,这个错误提示的用词为什么是这样的
……
……
……
你可以暂时先把这一行注释掉,然后用RunClass来调用Teacher这个类,运行一下,看看是什么结果。

//把main方法修改成下面的代码来运行public static void main(String[] arg){    Teacher teacher = new Teacher();    teacher.introduceToSomeone("小明");}

记得,运行之前,要把Teacher类里面的get/set方法都写进去。

顺便说一下可以使用eclipse这个工具,快速生成这些get/set方法,如下图:
(1)点Source下的Genarator Gettors and Settors
这里写图片描述

(2)选中这几个属性,点OK,即可。
这里写图片描述

现在你看到运行结果了,但是,运行结果中有很多null,先不管null是啥东西,总之,这个运行结果不是你希望的。
我们先做如下修改,然后再讲原因。
1)把Person类中的属性前面的private修改为protected
2)把introduceToSomeone方法中,原来因为错误注释掉的一行打开(现在不会再有错误了)
3)把RunClass的main方法改的饱满一些:

public static void main(String[] arg){    Teacher teacher = new Teacher();    teacher.setName("helen");    teacher.setAge(30);    teacher.setFavorite("落基山露营看星星");    teacher.setCourse("英语");    teacher.introduceToSomeone("小明");}

运行一下看看结果。

至此,通过代码,我们写了一个继承自Person的类Teacher,也运行了程序,看到了结果。
同时,你大约会有如下疑问:
1、能不能再总结一下,继承是什么
2、突然冒出来的protected是什么东西

解释来了:
1、继承是什么
继承就是让一个类,通过extends关键字,自动拥有另外一个类中已经有的东西。
Teacher类通过继承Person类自动拥有了Person类中如下东西:
1)它自己的代码里面没有name、age等属性,但是它仍然能使用这些属性,就象自己的代码中已经写了一样
2)它自己的代码里面没有sayHi这个方法,但是它也可以在代码中直接使用sayHi这个方法,就象自己的代码中已经写了一样

这就是继承的神奇之处!

2、突然冒出来的protected是什么东西
在前面一个课程中,已经介绍了两个东东:

  1. private:私有的
  2. public:公开的
  3. 通过这些关键字,定义类里面的属性或方法以怎样的形式在代码中被访问。

类似的,protected的作用是,对自己儿孙类们(就是继承于自己的类)是公开可被访问的,对外人(其他各种类)是私有的不可被访问。

Person类中的属性,原来是private,意味着这些属性仅仅能被自己使用,当修改为protected后,就可以被他的继承者Teacher类访问了。

最后留个作业:写一个叫“数学老师”的类,继承与Teacher类,看看你能写出来一个什么样的代码。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕有结石痛怎么办 肾结石痛又怀孕怎么办 怀孕肾结石疼怎么办啊 孕晚期肾绞痛怎么办 肾绞疼引起的呕吐怎么办 肾绞痛肚子胀气怎么办 iga肾炎肉眼血尿怎么办 结石疼怎么办怎么缓解 肾有问题严重怎么办 肾结石突然很疼怎么办 输尿管结石肉眼血尿该怎么办 结石引起肾绞痛怎么办 尿结石支架后尿里老有血怎么办? 结石堵在输尿管怎么办 尿路结石痛怎么办 怀孕了有肾结石怎么办 怀孕有肾结石怎么办啊 肾结石无疼血尿怎么办 胆囊胆管都结石怎么办 肾里面有肿瘤怎么办 肾癌手术后发烧怎么办 尿结石堵住尿道怎么办 尿结石不能排尿怎么办 肾癌小便有血怎么办 膀胱癌膀胱全切怎么办 怀孕了有阑尾炎怎么办 食物堵塞在食管怎么办 食物卡在食管怎么办 小孩食道卡异物怎么办 八十岁老人得了膀胱癌怎么办 肾结石引起吐血尿血怎么办 肾结石引起的尿血怎么办 食道感觉有异物怎么办 膀胱出血有血块怎么办 肾小球滤过率20怎么办 膀胱癌术后有血尿怎么办 肾病贫血怎么办吃什么 低蛋白血症怎么办 慢性肾炎患者感冒了怎么办 透析病人磷高怎么办 尿毒症透析磷高怎么办