码迷,mamicode.com
首页 > 编程语言 > 详细

Java知多少(27)继承的概念与实现

时间:2015-04-06 11:25:59      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似。

继承可以理解为一个类从另一个类获取方法和属性的过程。如果类B继承于类A,那么B就拥有A的方法和属性。

继承使用 extends 关键字。

例如我们已经定义了一个类 People:

1 class People{
2     String name;
3     int age;
4     int height;
5    
6     void say(){
7         System.out.println("我的名字是 " + name + ",年龄是 " + age + ",身高是 " + height);
8     }
9 }

如果现在需要定义一个类 Teacher,它也有 name、age、height 属性和 say() 方法,另外还需要增加 school、seniority、subject 属性和 lecturing() 方法,怎么办呢?我们要重新定义一个类吗?


完全没必要,可以先继承 People 类的成员,再增加自己的成员即可,例如:

 1 class Teacher extends People{
 2     String school;  // 所在学校
 3     String subject;  // 学科
 4     int seniority;  // 教龄
 5    
 6     // 覆盖 People 类中的 say() 方法
 7     void say(){
 8         System.out.println("我叫" + name + ",在" + school + "教" + subject + ",有" + seniority + "年教龄");
 9     }
10    
11     void lecturing(){
12         System.out.println("我已经" + age + "岁了,依然站在讲台上讲课");
13     }
14 }

对程序的说明

  • name 和 age 变量虽然没有在 Teacher 中定义,但是已在 People 中定义,可以直接拿来用。
  • Teacher 是 People 的子类,People 是Teacher 类的父类。
  • 子类可以覆盖父类的方法。
  • 子类可以继承父类除private以为的所有的成员。
  • 构造方法不能被继承。


继承是在维护和可靠性方面的一个伟大进步。如果在 People 类中进行修改,那么 Teacher 类就会自动修改,而不需要程序员做任何工作,除了对它进行编译。

单继承性:Java 允许一个类仅能继承一个其它类,即一个类只能有一个父类,这个限制被称做单继承性。后面将会学到接口(interface)的概念,接口允许多继承。

最后对上面的代码进行整理:

 1 public class Demo {
 2     public static void main(String[] args) {
 3         Teacher t = new Teacher();
 4         t.name = "小布";
 5         t.age = 70;
 6         t.school = "清华大学";
 7         t.subject = "Java";
 8         t.seniority = 12;
 9         t.say();
10         t.lecturing();
11     }
12 }
13 class People{
14     String name;
15     int age;
16     int height;
17    
18     void say(){
19         System.out.println("我的名字是 " + name + ",年龄是 " + age + ",身高是 " + height);
20     }
21 }
22 class Teacher extends People{
23     String school;  // 所在学校
24     String subject;  // 学科
25     int seniority;  // 教龄
26    
27     // 覆盖 People 类中的 say() 方法
28     void say(){
29         System.out.println("我叫" + name + ",在" + school + "教" + subject + ",有" + seniority + "年教龄");
30     }
31    
32     void lecturing(){
33         System.out.println("我已经" + age + "岁了,依然站在讲台上讲课");
34     }
35 }

运行结果:

我叫小布,在清华大学教Java,有12年教龄
我已经70岁了,依然站在讲台上讲课

注意:构造方法不能被继承,掌握这一点很重要。 一个类能得到构造方法,只有两个办法:编写构造方法,或者根本没有构造方法,类有一个默认的构造方法。

 系列文章:

Java知多少(1)语言概述

Java知多少(2)虚拟机(JVM)以及跨平台原理

Java知多少(3) 就业方向

Java知多少(4)J2SE、J2EE、J2ME的区别

Java知多少(5) Java开发环境的搭建

Java知多少(6)第一个程序示例

Java知多少(7)类与对象

Java知多少(8)类库及其组织结构

Java知多少(9) import及Java类的搜索路径

Java知多少(10)数据类型及变量

Java知多少(11)数据类型转换

Java知多少(12)运算符

Java知多少(13)流程控制

Java知多少(14)数组

Java知多少(15)字符串

Java知多少(16)StringBuffer与StringBuider

Java知多少(17)强调一下编程风格

Java知多少(18)类的定义及其实例化

Java知多少(19)访问修饰符(访问控制符)

Java知多少(20)变量的作用域

Java知多少(21)this关键字详解

Java知多少(22)方法重载

Java知多少(23)类的基本运行顺序

Java知多少(24)包装类、拆箱和装箱详解

Java知多少(25)再谈Java包

Java知多少(26)源文件的声明规则

Java知多少(27)继承的概念与实现

Java知多少(27)继承的概念与实现

标签:

原文地址:http://www.cnblogs.com/Coda/p/4395513.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!