继承时类和类之间的关系,是一个很简单很直观的概念,与显示生活中的继承(例如儿子继承了父亲财产)类似。

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

继承使用extends关键字。

例如我们定义了一个People:

public class People {
public String name;//姓名
public String age;//年龄
public String sex;//属性
public void say(){
System.out.println("我的名字为"+this.name+",年龄为"+this.age+",性别为"+this.sex);
}
}

如果现在还需要定义两个类,一个是Teacher类,而这个类需要有基本的name,age,sex属性,还需要增加school,subject,seniority属性。怎么办呢?我们要重新定义一个类吗?

完全没必要,可以先继承People类,然后在增加自己的属性即可。例如:

public class Teacher extends People{
public String school;//教师所在的学校
public String subject;//学科
public int seniority;//教龄 public void say(){
System.out.println("我的名字为"+this.name+",在"+school+"教"+this.subject+",有"+seniority+"年教龄!");
} public void lecturing() {
System.out.println("我已经" + age + "岁了,还在教育岗位!");
}
}

其中

  • name和age变量虽然没有在Teacher中定义,但是已经在People中定义,而Teacher继承了People类,这样People中的属性和方法可以直接拿过来用。
  • 而Teacher类继承了People类,称Teacher是People类的子类,People是Teacher的父类。
  • 子类可以覆盖父类中的方法。
  • 子类可以覆盖父类除private修饰的以外的所有成员。

构造方法不能被继承。
继承是在维护和可靠性的一个伟大进步,如果在People中进行修改,那么Teacher类就会自动修改,而不需要手动去修改。

单继承性:Java允许一个类仅能继承一个其他类,即一个类只能有一个父类,这个限制被称为单继承性,而接口允许多继承,弥补了Java类只能单继承的缺陷。
如果一个类没有显式的继承一个父类,那么这个类的默认父类就是Object类,Object类是所有类的父类。

在上面的基础上,实现一个教师:

public class PeopleDemo {
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.name = "小布";
teacher.age = "70";
teacher.school = "清华大学";
teacher.subject = "JAVA";
teacher.seniority = 12;
teacher.say();
teacher.lecturing();
}
}

运行结果:

在 Java 编程语言中,对象的初始化是非常结构化的,这样做是为了保证安全。在前面的模块中,看到了当一个特定对象被创建时发生了什么。由于继承性,对象被完成,而且下述行为按顺序发生:

  1. 存储空间被分配并初始化到 0 值
  2. 进行显式初始化
  3. 调用构造方法
  4. 层次中的每个类都会发生最后两个步骤,是从最上层开始。

Java 技术安全模式要求在子类执行任何东西之前,描述父类的一个对象的各个方面都必须初始化。因此,Java 编程语言总是在执行子构造方法前调用父类构造方法的版本。有继承的类在运行的时候,一定要记得:初始化子类必先初始化父类,这是Java 程序的一个基本运行过程。比如:

public class Test extends Parent {
private String name;
private int age;
public Test() {
name="Tom";
age=20;
}
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.name + "的年龄是" + t.age);
}
}
public class Parent {
private int num = 1;
public Parent() {
System.out.println("现在初始化父类");
}
public void test() {
System.out.println("这是父类的test方法");
}
}

运行结果:

上述类的基本运行顺序是:

  1. 先运行到第 8 行,这是程序的入口。
  2. 然后运行到第 9 行,这里要 new 一个 Test,就要调用 Test 的构造方法。
  3. 就运行到第 4 行,注意:初始化子类必先初始化父类。
  4. 要先初始化父类,所以运行到第 15 行。
  5. 然后是第 14 行,初始化一个类,必须先初始化它的属性。
  6. 然后是第 16 行。
  7. 然后是第 17 行,表示父类初始化完成。
  8. 然后是回到子类,开始初始化属性,因此运行到第 2 行,然后是第 3 行。
  9. 子类属性初始化完过后,才回到子类的构造方法,执行里面的代码,也就是第 5、6 行。
  10. 然后是第7 行,表示 new 一个 Test 实例完成。
  11. 然后回到 main 方法中执行第 10 行。
  12. 然后是第 11 行。

参考资料来源:网络。

《Java基础知识》Java继承的概念和实现的更多相关文章

  1. JAVA基础知识|java虚拟机(JVM)

    一.JVM简介 java语言是跨平台的,兼容各种操作系统.实现跨平台的基石就是虚拟机(JVM),虚拟机不是跨平台的,所以不同的操作系统需要安装不同的jdk版本(jre=jvm+类库:jdk=jre+开 ...

  2. java基础知识——Java的定义,特点和技术平台

    (作者声明:对于Java编程语言,很多人只知道怎么用,却对其了解甚少.我也是其中一员.所以菜鸟的我,去查询了教科书以及大神的总结,主要参考了<Java核心技术>这本神作.现在分享给大家!) ...

  3. [java基础知识]java安装步骤

    jre:  java运行环境.  jre =  java虚拟机 + 核心类库(辅助java虚拟机运行的文件).如果只是运行java程序,只需要安装jre.    jdk: java开发工具集   jd ...

  4. java基础知识总结--继承和接口

    什么是继承?什么是接口?他们之间的区别和联系是什么? 什么是继承? 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能.多个类中存在相同属性和行 ...

  5. java 基础知识十 继承和多态

    java  基础知识十   继承和多态 继承 1.定义: 继承是指声明一些类,可以再进一步声明这些类的子类,而子类具有父类已经拥有的一些方法和属性,这跟现实中的父子关系是十分相似的,所以面向对象把这种 ...

  6. java 基础知识(java web 方面的)

    1.java面向对象的基本特征:封装性,多态性,继承性. 2.Java的泛型:iterator接口主要有hasnext()方法,next()方法,remove()方法:collection接口继承了i ...

  7. [转] Java基础知识——Java语言基础

    http://blog.csdn.net/loneswordman/article/details/9905931 http://blog.csdn.net/wanghuan203/article/d ...

  8. java基础知识精华

    转载:https://www.jianshu.com/p/6c078abb720f java基础知识 java内存模型 java运行时数据区域 hashMap 如何解决冲突 存储方式 冲突达到一定数量 ...

  9. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  10. JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)

    本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...

随机推荐

  1. node中mysql和短信使用方法(3)

    一.mysql的使用 使用mysql首先得有数据库并且表里面有数据,我创建了数据库newsql,里面Tables有表company等等. company有id,name,other等字段 1.导入my ...

  2. H3C交换机、路由器 ssh登录配置

    VLAN 10  创建vlan并配好ip inter vlan 10 ip add  20.1.1.1  24 qu ip route-static 0.0.0.0 0 20.1.1.254  写好静 ...

  3. websrom编译器

    webstorm less环境配置 备注: 安装node后,在命令行输入npm install -g less 即可安装less,打开webstorm setting-Tools-FileWatche ...

  4. day 17 re模块 正则表达式

    import re    引用re模块 查找 finall:匹配所有,每一项都是列表中的一个元素 search:只匹配从左到右的第一个,得到的不是直接的结果而是一个变量,通过group方法获取结果,没 ...

  5. es6 every的使用

    let arr2 =[1,3,5,7,9,10]; //arr2.every() 数组里面所有的元素都有符合条件,才返回true var b =arr2.every(function (val,ind ...

  6. 不止面试02-JVM内存模型面试题详解

    第一部分:面试题 本篇文章我们将尝试回答以下问题: 描述一下jvm的内存结构 描述一下jvm的内存模型 谈一下你对常量池的理解 什么情况下会发生栈内存溢出?和内存溢出有什么不同? String str ...

  7. NTP服务编译安装报错:/usr/bin/ld: cannot find –lcap

    [root@localhost local]# find / -name "*libcap.so*" [root@localhost ntp-4.2.8p13]# cd /usr/ ...

  8. 《手把手教你》系列练习篇之4-python+ selenium自动化测试(详细教程)

    1.  简介 今天我们继续前边的练习,学习和练习一下:如何使用webdriver方法获取当前测试页面的URL.如何获取当前页面的title. 2. webdriver方法获取当前测试页面的URL 本小 ...

  9. 转帖:30多条mysql数据库优化方法,千万级数据库记录查询轻松解决

    地址:http://www.ihref.com/read-16422.html

  10. 基于 HTML5 + WebGL 的太阳系 3D 展示系统

    前言 近年来随着引力波的发现.黑洞照片的拍摄.火星上存在水的证据发现等科学上的突破,以及文学影视作品中诸如<三体>.<流浪地球>.<星际穿越>等的传播普及,宇宙空间 ...