您的位置:首页 > 编程语言 > Java开发

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

2015-08-02 15:14 267 查看

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

什么是类的继承?

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

用一个例子说话。

前面一直用的一个类: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是什么东西

在前面一个课程中,已经介绍了两个东东:

private:私有的

public:公开的

通过这些关键字,定义类里面的属性或方法以怎样的形式在代码中被访问。

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

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

最后留个作业:写一个叫“数学老师”的类,继承与Teacher类,看看你能写出来一个什么样的代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 基础 入门