继承.Java

目录

1,概述

1.1继承的含义

1.2什么时候用继承

1.3继承的好处

1.4继承的特点

2,继承的格式

3,可以继承哪些内容

4,成员方法和成员变量的访问特点

5,构造方法的访问特点 

6,this,super使用总结

7,小结

8,练习 


1,概述

1.1继承的含义

继承:就是子类继承父类的属性和行为,使得子类对象可以直接具有与父类相同的属性、相同的行为(行为可重写)。子类可以直接访问父类中的非私有的属性和行为。

继承描述的是事物之间的所属关系,这种关系是:is-a 的关系。例如,兔子属于食草动物,食草动物属于动物。可见,父类更通用,子类更具体。我们通过继承,可以使多种事物之间形成一种关系体系。

  • Java提供一个关键字extends,用这个关键字,我们可以让一个类与另一个类建立联系
public class Cat extends Animal{}
  •  Cat称为子类(派生类),Animal称为父类(基类或超类)

1.2什么时候用继承

当类与类之间,存在相同(共性)的内容,并满足子类是父类的一种,就可以考虑用继承来优化代码

图一:

图二 

图一设计的继承结构正确,图二错误,因为Coder是人,Goods是物品,Coder不是Goods里面的一种

1.3继承的好处

  • 可以把多个子类中重复的代码抽取到父类中,提高代码的复用性(减少代码冗余,相同代码重复利用)。
  • 子类可以在父类的基础上,增加其他的功能,使子类更强大
  • 使类与类之间产生了关系

1.4继承的特点

  • Java只支持单继承:一个类只能继承一个直接父类
  • 不支持多继承,但支持多层继承

多层继承:子类A继承父类B,父类B可以继承父类C

2,继承的格式

通过extends关键字,可以声明一个子类继承一个父类,定义格式如下:

class 父类{.....
}
class 子类  extends  父类{.....
}

 需要注意:Java是单继承的,一个类只能继承一个直接父类,跟现实世界很像,相当于一个儿子只能有一个父亲,但是Java中的子类是更加强大的。

例子

package extendsKey;public class Test {public static void main(String[] args) {//创建对象Ragdoll rd=new Ragdoll();rd.eat();rd.drink();//间接继承rd.mouse();//直接继承System.out.println("-----------------");Huskey hs=new Huskey();hs.eat();hs.drink();//间接继承hs.lookHome();//直接继承hs.catchHome();//本类中的行为//子类只能访问父类中非私有的成员}
}class Animal {public void eat(){System.out.println("动物在吃饭");}public void drink(){System.out.println("动物在喝水");}
}class Cat extends Animal{public void mouse (){System.out.println("猫在抓老鼠");}
}class Dog extends Animal{public void lookHome(){System.out.println("狗在看家");}
}class Huskey extends Dog{public void catchHome(){System.out.println("哈士奇在拆家");}
}class Ragdoll extends Cat{}
结果

3,可以继承哪些内容

  • 构造方法不能被继承
  • 成员变量都能被继承,但私有的不能使用
  • 成员方法非私有能,私有不能

4,成员方法和成员变量的访问特点

就近原则:谁离我近,我就用谁

  • 重名怎么办

System.out.println(name); 从局部位置开始往上找
System.out.println(this.name);从本类成员位置开始往上找,如果本类中没有,就找从父类继承下来的
System.out.println(super.name);从父类成员位置开始往上找

package extendsKey;public class Fu {String name="Fu";
}
class Zi extends Fu{String name="Zi";public void Zishow(){String name="zishow";System.out.println(name);System.out.println(this.name);System.out.println(super.name);}
}
class Tester{public static void main(String[] args) {Zi per=new Zi();per.Zishow();}
}

结果 

4.1成员方法的重写

(1)重写是什么?

  • 子类可以继承父类方法,但有时从父类继承的方法在子类中必须进行修改以适应新类的需要,这种对父类方法进行改写或改造的现象称为方法重写或方法覆盖。父类方法在子类中重写使继承更加灵活。

(2)语法规则:

  •  在子类中定义;
  • 方法名、参数类型、顺序、个数(不包括参数名,对参数名没有要求)都要与父类继承的方法相同;

  • 当子类重写父类方法后,子类对象调用的是重写后的方法。

  • Java中用@Override标注重写后的方法,如果重写不成功,标注会报错

5,构造方法的访问特点 

  • 父类中的构造方法不会被子类继承
  • 子类中所有的构造方法默认先访问父类中的无参构造,再执行自己

为什么?

  • 子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据
  • 子类在初始化之前,一定要调用父类构造方法先完成父类数据空间的初始化
  • 父类中的属性都是共性的内容,而且都是可以被子类继承下来的,而父类中的空参构造就是给父类中的属性一个默认初始化,如果没有这一步,子类在使用父类的属性是就没有值了

怎么调用父类构造方法的?

  • 子类构造方法的第一行默认语句都是:super(),不写也存在,且必须在第一行
  • 如果想要调用父类的有参构造,必须手动写super进行调用,因为默认的只能调用空参

代码实现

6,this,super使用总结

  • this:理解为一个变量,表示当前方法调用者的地址值
  • super:代表父类存储空间
关键字访问成员变量访问成员方法访问构造方法
this

this.成员变量

访问本类成员变量

this.成员方法(...)

访问本类成员方法

this(...)

访问本类其他构造方法

super

super.成员变量

访问父类成员变量

super.成员方法(...)

访问父类成员方法

super(...)

访问父类构造方法

this(...)访问本类其他构造方法:

  • 什么时候用到:给一些数据做默认值的时候就会用到

结果 

7,小结

  1. 继承实际上是子类相同的属性和行为可以定义在父类中,子类特有的属性和行为由自己定义,这样就实现了相同属性和行为的重复利用,从而提高了代码复用。
  2. 子类继承父类,就可以直接得到父类的成员变量和方法

8,练习 

  • 带有继承结构的标准javabean类(成员变量私有化,用set,get方法获取)

1,经理

成员变量:工号,姓名,工资,管理奖金

成员方法:工作(管理其他人),吃饭(吃米饭)

2,厨师

成员变量:工号,姓名,工资

成员方法:工作(炒菜),吃饭(吃米饭)

  • 父类
package extendsKey;public class Employee {//1.见名知意//2.所有成员变量都要私有化//3.构造方法(空参  带全部参数的构造)//4。get/set方法private String id;private String name;private double salary;public Employee() {}public Employee(String id, String name, double salary) {this.id = id;this.name = name;this.salary = salary;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}public void work(){System.out.println("在工作");}public void eat(){System.out.println("在吃米饭");}
}
  • 子类
package extendsKey;public class Manager extends Employee{private double bonus;//空参构造public Manager() {}//带全部参数的构造  父类+子类public Manager(String id, String name, double salary, double bonus) {super(id, name, salary);this.bonus = bonus;}public double getBonus() {return bonus;}public void setBonus(double bonus) {this.bonus = bonus;}@Overridepublic void work(){System.out.println("管理其他人");}
}
package extendsKey;public class Cook extends Employee{public Cook() {}public Cook(String id, String name, double salary) {super(id, name, salary);}@Overridepublic void work(){System.out.println("厨师正在炒菜");}
}
  • 测试类
package extendsKey;public class Test3 {public static void main(String[] args) {Manager s=new Manager("001","管理小行家",99999.1,8000);System.out.println(s.getId()+","+s.getName()+","+s.getSalary()+","+s.getBonus());Cook c=new Cook();c.setId("002");c.setName("厨师高手");c.setSalary(9999.9);System.out.println(c.getId()+","+c.getName()+","+c.getSalary());}
}
  • 结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/792436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端三剑客 —— CSS (第一节)

目录 CSS 什么是CSS CSS的几种写法: 行内样式 内嵌样式 外链样式 import 加载顺序 CSS选择器*** 基本选择器 ID选择器 标签选择器 类选择器 通用选择器 包含选择器 上节内容中提到了 前端三剑客 —— HTML 超文本标记语言,这节内容 跟大家…

大厂面试之【Redis持久化机制】 - RDB和AOF概述及应用配置

文章目录 Redis持久化1. RDB(Redis DataBase)1.1 概述1.2 配置应用 2. AOF(Append Only File)2.1 概述2.2 配置应用 Redis持久化 先上结论:Redis持久化操作分为rdb以及aof,但是前者已经够用 1. RDB(Redis DataBase) 1.1 概述 rdb保存的是dump.rdb文件在指…

WEB漏洞挖掘详细教程--用户输入合规性(sql注入测试)

前置教程:WEB漏洞挖掘(SRC)详细教程--信息收集篇-CSDN博客 WEB漏洞挖掘(SRC)详细教程--身份认证与业务一致性-CSDN博客 WEB漏洞挖掘(SRC)详细教程--业务数据篡改-CSDN博客 2.4 用户输入合规性…

MCRNet:用于乳腺超声成像语义分割的多级上下文细化网络

这里写目录标题 摘要引言方法 摘要 由于对比度差、目标边界模糊和大量阴影的不利影响,乳腺超声成像中的自动语义分割仍然是一项具有挑战性的任务。最近,具有U形的卷积神经网络(CNN)在医学图像分割中表现出相当好的性能。然而&…

【C++ STL迭代器】iterator

文章目录 【 1. 迭代器的属性 】【 2. 不同容器支持的迭代器 】【 3. 迭代器的定义方式 】【 4. 实例 】4.1 定义方式:正向迭代器和反向迭代器4.2 迭代器属性:前向迭代、双向迭代、随机迭代4.2 迭代器的遍历方法4.3 auto关键字 自动指定迭代器定义类型 背…

【Qt】:常用控件(四:显示类控件)

常用控件 一.Lable二.LCD Number 一.Lable QLabel 可以⽤来显⽰⽂本和图⽚. 代码⽰例:显⽰不同格式的⽂本 代码⽰例:显⽰图⽚ 此时,如果拖动窗⼝⼤⼩,可以看到图⽚并不会随着窗⼝⼤⼩的改变⽽同步变化 为了解决这个问题,可以在Widget中重写resizeEvent函数。当用户把窗口从A拖…

基于单片机双路压力监测报警系统

**单片机设计介绍,基于单片机双路压力监测报警系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机双路压力监测报警系统是一个专门设计用于实时监测和报警两路压力变化的系统。它结合了单片机控制技术和压…

图DP

目录 有向无环图DP 力扣 329. 矩阵中的最长递增路径 力扣 2192. 有向无环图中一个节点的所有祖先 有向有环图DP 力扣 1306. 跳跃游戏 III 有向无环图DP 力扣 329. 矩阵中的最长递增路径 给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。 对…

【DA-CLIP】test.py解读,调用DA-CLIP和IRSDE模型复原计算复原图与GT图SSIM、PSNR、LPIPS

文件路径daclip-uir-main/universal-image-restoration/config/daclip-sde/test.py 代码有部分修改 导包 import argparse import logging import os.path import sys import time from collections import OrderedDict import torchvision.utils as tvutilsimport numpy as…

数学知识--(质数,约数)

本文用于个人算法竞赛学习,仅供参考 目录 一.质数的判定 二.分解质因数 三.质数筛 1.朴素筛法 2.埃氏筛法 3.线性筛法 四.约数 1.求一个数的所有约数 2.约数个数和约数之和 3.欧几里得算法(辗转相除法)-- 求最大公约数 一.质数的判定 …

新型智慧城市大数据解决方案(附下载)

随着云计算、大数据、移动互联网等技术的发展,由城市运行产生的交通、环境、市政、商业等各领域数据量巨大,这些数据经过合理的分析挖掘可产生大量传统数据不能反映的城市运行信息,已成为智慧城市的重要资产。 在大数据时代,数据信…

理解main方法的语法

由于JVM需要调用类的main()方法,所以该方法的访问权限必须是public,又因为JVM在执行main()方法时不必创建对象,所以该方法必须是static的,该方法接收一个String类型的数组参数,该数组中保存执行Java命令时传递给所运行…

问题解决:写CSDN博文时图片大小不适应,不清晰,没法排版

项目环境: Window10,Edge123.0.2420.65 问题描述: 当我在CSDN写博文的时候,会经常插入一些图片,但有时候我插入的图片太大了,影响了整体排版。 比如我加入了一张图片,就变成了下面这个样子&…

PEFT-LISA

LISA是LoRA的简化版,但其抓住了LoRA微调的核心,即LoRA侧重更新LLM的底层embedding和顶层head。 根据上述现象,LISA提出两点改进: 始终更新LLM的底层embedding和顶层head随机更新中间层的hidden state 实验结果 显存占用 毕竟模型…

openstack云计算(一)————openstack安装教程,创建空白虚拟机,虚拟机的环境准备

1、创建空白虚拟机 需要注意的步骤会截图一下,其它的基本都是下一步,默认的即可 ----------------------------------------------------------- 2、在所建的空白虚拟机上安装CentOS 7操作系统 (1)、在安装CentOS 7的启动界面中…

RuoYi-Vue若依框架-集成mybatis-plus报错Unknown column ‘search_value‘ in ‘field list‘

报错信息 ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column search_value in field list ### The error may exist in com/ruoyi/sales/mapper/ZcSpecificationsMapper.java (best guess) ### The error may involve defaultParameter…

【简单讲解下WebSocket】

🌈个人主页:程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

Python卷积网络车牌识别系统(V2.0)

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

基于单片机的无线红外报警系统

**单片机设计介绍,基于单片机的无线红外报警系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的无线红外报警系统是一种结合了单片机控制技术和无线红外传感技术的安防系统。该系统通过无线红外传感器实…

SpringBoot -- 外部化配置

我们如果要对普通程序的jar包更改配置,那么我们需要对jar包解压,并在其中的配置文件中更改配置参数,然后再打包并重新运行。可以看到过程比较繁琐,SpringBoot也注意到了这个问题,其可以通过外部配置文件更新配置。 我…