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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统