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

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

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

用一个例子说话。
前面一直用的一个类: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类,看看你能写出来一个什么样的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值