Java面向对象之继承

继承是面向对象的第二大特征,是实现软件复用的重要手段,也是面向对象的基石。接下的篇目将会围绕着继承这一特征展开探究。

引言

继承这个概念,在我们生活中也存在。

  • 就比如,老王和他的儿子小王是父亲与儿子的关系,小王以后是要继承老王的衣钵的!
  • 很显然,小王很多方面都和老王一样,有一样的姓氏,一样的地址……
  • 老王教会小王很多为人处世的道理,小王在很多行为方面效仿老王。
  • 老王爱喝酒,小王却不喜欢,反而喜欢可乐,小王的儿子小小王喜欢喝雪碧。
  • 甚至,符合伦理的话,小王不能有两个爸爸,但是老王可以有两个儿子。

老刘是老王的好朋友,老刘通过老王就能够知道小王的许多特点……

哈哈哈,说了一大堆,里面说出了许多可以类比于Java继承的特点。

下面的程序,其实略有不妥,因为创建类的时候格局太小。。但是自己理解起来相对会容易一些,后续将会完善例子。

package com.my.pac11;

/**
* @author Summerday
* @date 2019/12/9 19:45
*/
//老王类
public class LaoWang {
private String lastName;//姓氏
public String address;//家庭住址
//super类构造器
public LaoWang() {
System.out.println("未知信息老王创建");
} public LaoWang(String address) {
this.address = address;
System.out.println("创建家住在" + this.address + "王xx");
} public void setLastName(String lastName) {
this.lastName = lastName;
} public String getLastName() {
return lastName;
} public void doGoodThings() {
System.out.println(this.getLastName() + "做好事……");
} public void drink() {
System.out.println("老王酗酒……");
}
//重写Object类的toString方法
public String toString(){
return "Object类是所有类的直接父类或间接父类";
}
} //老李类
class LaoLi {
public LaoLi() {
System.out.println("我是老李!");
}
}
//LaoWang 是LittleXiaoWang的间接父类
class LittleXiaoWang extends XiaoWang {
//没有构造器会报错,子类必须第一步调用父类构造器
LittleXiaoWang(String n, String a) {
super(n, a);
}
//重写XiaoWang的方法,继承谁就改谁的
public void drink() {
System.out.println(this.getLastName() + "不喜欢喝可乐,喜欢雪碧……");
}
}
//一个类最多只有一个直接父类 ,可以有很多间接父类
//false: class XiaoWang extends LaoLi,LaoWang{...}
class XiaoWang extends LaoWang {
//子类构造器
XiaoWang(String lastName, String address) {
//super调用父类构造器
super(address);
setLastName(lastName);
} //重写父类的方法
public void drink() {
System.out.println(this.getLastName() + "不酗酒,喜欢喝可乐……");
} public static void main(String[] args) {
//先调用父类适合的构造器
//创建家住在浙江王xx
XiaoWang xw = new XiaoWang("小王", "浙江");
//false:System.out.println(l.lastName);
System.out.println(xw.getLastName() + "," + xw.address);//小王,浙江
//做好事……
xw.doGoodThings();
//小王不酗酒,喜欢喝可乐……
xw.drink();
//自动调用toString方法
System.out.println(xw);
System.out.println("********************");
//依旧先调用父类适合的构造器
//创建家住在浙江王xx
LittleXiaoWang lxw = new LittleXiaoWang("小小王", "浙江");
System.out.println(lxw.getLastName() + "," + lxw.address);//小小王,浙江
//小小王做好事……
lxw.doGoodThings();
//小小王不喜欢喝可乐,喜欢雪碧……
lxw.drink();
}
}
//测试
创建家住在浙江王xx
小王,浙江
小王做好事……
小王不酗酒,喜欢喝可乐……
Object类是所有类的直接父类或间接父类
********************
创建家住在浙江王xx
小小王,浙江
小小王做好事……
小小王不喜欢喝可乐,喜欢雪碧……

继承的特点

语法格式

[修饰符] class Subclass extends Superclass
{
//类定义部分
}

父子类的关系

  • extends是继承的关键字,Subclass是子类,也叫派生类,Superclass是父类,也叫基类,超类。
  • 子类一旦继承父类,将会获得父类所有的结构,也就是属性和方法。但是父类中用private修饰的成员(lastName),子类无法直接访问,但是可以通过父类提供的可访问的方法来证明,如xw.getLastName()
XiaoWang xw = new XiaoWang("小王", "浙江");
//false:System.out.println(l.lastName);
System.out.println(xw.getLastName() + "," + xw.address);//小王,浙江
  • 一个子类最多有一个直接父类,但可以有无限多个间接父类;一个父类可以有很多子类。
//下面的语句错误!
class XiaoWang extends LaoLi,LaoWang{...}
  • 子类父类是相对的概念,一个类可以是父类,也可以是子类,比如例中的XiaoWang。
  • 如果并没有显式指定一个类的直接父类,那么这个类将默认扩展java.lang.Object类,也就是说Object类是所有类的直接或间接父类。关于Object类之后会花一定篇幅进行总结。
//重写Object类的toString方法
public String toString(){
return "Object类是所有类的直接父类或间接父类";
}

继承要点

除了下面谈到的几个,还有好多好多,待补充!

重写父类方法

子类可以以父类为基础,额外增加新的成员变量或者方法。也可以重写父类的方法,就是相同方法名加参数列表,但是要定义不同的行为。(重写在下篇讲述……)

//父类的方法
public void drink() {
System.out.println("老王酗酒……");
}
//重写父类的方法
public void drink() {
System.out.println(this.getLastName() + "不酗酒,喜欢喝可乐……");
}

继承中的构造器

关于继承中的构造器,接下来将做详细讲解,暂时空缺。

//super类构造器
public LaoWang() {
System.out.println("未知信息老王创建");
} public LaoWang(String address) {
this.address = address;
System.out.println("创建家住在" + this.address + "王xx");
} //子类构造器
XiaoWang(String lastName, String address) {
//super调用父类构造器
super(address);
setLastName(lastName);
}

继承中的super关键字

super关键字用于限定该对象调用它的父类继承得到的实例变量或方法。super不能出现再static语句中。(之后补充。。)

 //super调用父类构造器
LittleXiaoWang(String n, String a) {
super(n, a);
}

...

注:本文有一些内容待补充,虽然后面的内容都有涉猎,想着一点一点蚕食知识点,所以大家见谅,一定第一时间补充!

参考书籍:《疯狂Java讲义》

Java面向对象之继承(一)的更多相关文章

  1. Java面向对象的继承

    继承也是面向对象的又一重要特性,继承是类于类的一种关系,通俗来说狗属于动物类,那么狗这个类就继承了动物类 java中的继承是单继承的,一个类只能继承与一个父类 子类继承父类之后,子类就拥有了父类的所有 ...

  2. JAVA面向对象之继承

    继承: 子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法 class 子类 extends 父类 { } 继承的特性: 子类拥有父类非private的属性,方法. 子类可以拥有自己 ...

  3. Java:[面向对象:继承,多态]

    本文内容: 继承 多态 首发时期:2018-03-23 继承: 介绍: 如果多个类中存在相同的属性和行为,可以将这些内容抽取到单独一个类中,那么多个类(子类)无需再定义这些属性和行为,只要继承那个类( ...

  4. Java面向对象之继承extends 入门实例

    一.基础概念 (一)继承的好处: 1.继承:提高了代码的复用性. 2.让类与类之间产生了关系,给多态这个特征提供了前提. (二)继承的种类: 1.单继承:一个类只能有一个父类. 2.多继承:一个类可以 ...

  5. Java面向对象_继承——基本概念以及管理化妆品实例分析

    一.继承的基本概念: 1.继承是面向对象三大特征之一 2.被继承的类成为父类(超类),继承父类的类成为子类(派生类) 3.继承是指一个对象直接使用另一个对象的属性和方法 4.通过继承可以实现代码重用 ...

  6. Java面向对象(继承、抽象类)

    面向对象 今日内容介绍 u 继承 u 抽象类 第1章 继承 1.1 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成 ...

  7. java面向对象之 继承 Inheritance

    对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类).派生类可以从它的基类那里继承方法和实例变量,并且类可以修 ...

  8. Java 面向对象之继承和重写OverWrite,重写和重载的区别,抽象类

    01继承的概述 A:继承的概念 a:继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系 b:在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作 ...

  9. Java面向对象之继承,方法重写,super关键字,员工类系列继承题

    在程序中,如果想声明一个类继承另一个类,需要使用extends关键字. 格式: class 子类 extends 父类 {} 继承的好处 1.继承的出现提高了代码的复用性,提高软件开发效率. 2.继承 ...

随机推荐

  1. 告别编码5分钟,命名2小时!史上最全的Java命名规范参考!

    简洁清爽的代码风格应该是大多数工程师所期待的.在工作中笔者常常因为起名字而纠结,夸张点可以说是编程5分钟,命名两小时!究竟为什么命名成为了工作中的拦路虎. 每个公司都有不同的标准,目的是为了保持统一, ...

  2. 第四章 开始Unity Shader学习之旅(1)

    1. 一个最简单的顶点/片元着色器 现在,我们正式开始学习如何编写Unity Shader,更准确的说是,学习如何编写顶点/片元着色器 2.顶点/片元着色器的基本结构 我们在以前已经讲过了Unity ...

  3. C# 中的委托和事件(一)

    引言 委 托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真 是太容易了,而没有 ...

  4. 对于Python函数与方法,你可能存在些误解

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  5. 卸载&&更新docker(ubuntu)

    卸载docker: apt-get purge lxc-docker apt-get autoremove 更新docker: apt-get update apt-get install lxc-d ...

  6. iOS开发-Apple Pay-苹果支付

    转自:http://www.open-open.com/lib/view/open1471952847228.html Apple Pay,是苹果公司在2014年苹果秋季新品发布会上发布的一种基于NF ...

  7. 洛谷 Atcoder 题解 AT2585 【Colorful Leaderboard】

    目测 普及/提高- 难度. 思路 将 9 种可能的等级存储在数组里,则 min 值为分数为 0 ~ 3199 的颜色种类个数,max 值为 min 值加上分数 >3200 的人数. 特判 若分数 ...

  8. HA-高可用集群

    原理:两台web服务器,通过心跳线进行通信,当主节点出现服务异常,备用节点通过探测判断主节点是否存活,若是不存活,就把服务接管过来. Web1和Web2中间有一根心跳线,检查对方的存活状态.流动IP: ...

  9. NodeJS4-9静态资源服务器实战_发到npm上

    登录->publish一下 ->上npm官网查看 -> 安装全局 //登录 npm login //推上去npm npm publish //全局安装 npm i -g 你的文件名

  10. this的绑定(四种绑定)+ 箭头函数 的this

    一.this的默认绑定 当一个函数没有明确的调用对象的时候,也就是单纯作为独立函数调用的时候,将对函数的this使用默认绑定:绑定到全局的window对象 例子1: function foo(){ c ...