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

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

继承使用 extends 关键字。

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

 class People{
String name;
int age;
int height; void say(){
System.out.println("我的名字是 " + name + ",年龄是 " + age + ",身高是 " + height);
}
}

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

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

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

对程序的说明

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

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

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

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

 public class Demo {
public static void main(String[] args) {
Teacher t = new Teacher();
t.name = "小布";
t.age = 70;
t.school = "清华大学";
t.subject = "Java";
t.seniority = 12;
t.say();
t.lecturing();
}
}
class People{
String name;
int age;
int height; void say(){
System.out.println("我的名字是 " + name + ",年龄是 " + age + ",身高是 " + height);
}
}
class Teacher extends People{
String school; // 所在学校
String subject; // 学科
int seniority; // 教龄 // 覆盖 People 类中的 say() 方法
void say(){
System.out.println("我叫" + name + ",在" + school + "教" + subject + ",有" + seniority + "年教龄");
} void lecturing(){
System.out.println("我已经" + age + "岁了,依然站在讲台上讲课");
}
}

运行结果:

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

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

 系列文章:

Java知多少(上)

Java知多少(中)

Java知多少(27)继承的概念与实现的更多相关文章

  1. Java知多少(34)final关键字:阻止继承和多态

    在 Java 中,声明类.变量和方法时,可使用关键字 final 来修饰.final 所修饰的数据具有“终态”的特征,表示“最终的”意思.具体规定如下: final 修饰的类不能被继承. final ...

  2. Java知多少(38)抽象类的概念和使用

    在自上而下的继承层次结构中,位于上层的类更具有通用性,甚至可能更加抽象.从某种角度看,祖先类更加通用,它只包含一些最基本的成员,人们只将它作为派生其他类的基类,而不会用来创建对象.甚至,你可以只给出方 ...

  3. 继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类。 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。 (4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。 分析以上程

    继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法.(3)子类中定义的成员变量和父类中定义的 ...

  4. 《Java基础知识》Java继承的概念和实现

    继承时类和类之间的关系,是一个很简单很直观的概念,与显示生活中的继承(例如儿子继承了父亲财产)类似. 继承可以理解为一个类从另一个类中获取方法和属性的过程.如果类B继承于类A,那么类B就拥有类A的属性 ...

  5. Java知多少(完结篇)

    Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java ...

  6. Java知多少(上)

    Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java ...

  7. JAVA常用基础知识点[继承,抽象,接口,静态,枚举,反射,泛型,多线程...]

    类的继承 Java只支持单继承,不允许多重继承- 一个子类只能有一个父类- 一个父类可以派生出多个子类这里写图片描述子类继承了父类,就继承了父类的方法和属性.在子类中,可以使用父类中定义的方法和属性, ...

  8. Java基础之面向对象以及其他概念

    一.基础知识:1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平台,jvm不是跨平台的. JR ...

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

    Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: 1 public class className { 2 // body of class 3 } 4 pr ...

随机推荐

  1. iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2)

    iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2) 此时,当用户轻拍按钮后,一个叫tapButton()的方法就会被触发. 注意:以上这一种方式是动作声明和关联一起进行的,还有一种先 ...

  2. 多线程IO通过并发IO来优化性能

    1.通过多线程IO,并发的IO形式来减少顺序IO达到提升性能的目的. 2.具体线程使用方式可以参见  http://www.cnblogs.com/freedommovie/p/7155260.htm ...

  3. loj#2665. 「NOI2013」树的计数

    目录 题目链接 题解 代码 题目链接 loj#2665. 「NOI2013」树的计数 题解 求树高的期望 对bfs序分层 考虑同时符合dfs和bfs序的树满足什么条件 第一个点要强制分层 对于bfs序 ...

  4. codeforces1027F. Session in BSU

    题目链接 codeforces1027F. Session in BSU 题解 二分图匹配就fst了....显然是过去的,不过tle test87估计也pp了,好坑 那么对于上面做匹配的这个二分图分情 ...

  5. shutdown vs close

    shutdown 和 close关闭tcp连接的介绍网上有很多,主要区别如下: 1.调用close后,将中止通信.删除套接字.丢弃数据.但是,注意喽,但是,如果有多个进程共享一个套接字,close每被 ...

  6. fatal error C1859 意外的预编译头错误,只需重新运行编译器(转)

    微软的建议 要解决此问题,请使用下列方法之一. http://support.microsoft.com/kb/976656/zh-cn 方法 1 禁用/analyze编译器选项,则它会被启用. 方法 ...

  7. Asp.Net Core 自定义设置Http缓存处理

    一.使用中间件 拦截请求自定义输出文件 输出前自定义指定响应头 public class OuterImgMiddleware { public static string RootPath { ge ...

  8. C# 反编译问题收集

    ILSpy_Master_2.4.0.1963_Binaries return null;   return   default(T); 1 public T Des<T>(byte[] ...

  9. <转>房租分配问题

    本文转自:https://blog.codingnow.com/2012/12/share_rent.html 今天读到策划同学的周报中提到的一个关于合租房子的分摊房租问题. 引用周报中的一节如下: ...

  10. 基于Centos搭建Jenkins 环境搭建

    系统要求: CentOS 7.2 64 位操作系统 安装 Jenkins Jenkins 简介 Jenkins 是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提 ...