DAY7 继承多态

ops/2024/10/15 23:45:08/

继承

 目的

提高代码的重用性,减少一些重复代码的书写

权限修饰符

就是是用来限制类中的成员(成员变量、成员方法、构造器)能够被访问的范围。

private 只能本类
缺省 本类、同一个包中的类
protected 本类,同一个包中的类、子孙类中
public 任意位置

特点

单继承:Java是单继承模式:一个类只能继承一个直接父类

多层继承:Java不支持多继承,但支持多层继承
祖宗类:Java中所有的类都是object类的子类

就近原则:优先访问自己类中,自己类中的没有才会访问父类,当子类要访问相同的父类的内容则需要用super关键字

方法重写

当子类觉得父类中的某个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法,这就是方法重写。

注意事项

  • @Override增加注解
  • 子类重写父类方法时,访问权限必须大于或者等于父类该方法的权限(public > protected >缺省)
  • 重写的方法返回值类型,必须与被重写方法的返回值类型一样,或者范围更小。
  • 私有方法、静态方法不能被重写,如果重写会报错的。

 常见场景

子类重写Object类的toString()方法,以便返回对象的内容。

子类构造器的特点

子类的全部构造器,都会先调用父类的构造器,再执行自己。

简单举个例子

首先创建一个People类,定义姓名,性别,还有有参,无参构造器,以及getter和setter方法

java">package com.test.exten;public class People {private  String name;private  char sex;public People(String name, char sex) {this.name = name;this.sex = sex;}public People() {}@Overridepublic String toString() {return "People{" +"name='" + name + '\'' +", sex=" + sex +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}
}

创建一个People类,定义技能,有参和无参构造器。

java">package com.test.exten;public class Teacher extends People {private String skill;//    public Teacher(String name, char sex, String skill) {
//        super(name, sex);
//        this.skill = skill;
//    }public Teacher(String skill) {this.skill = skill;}public String getSkill() {return skill;}public Teacher() {}public void setSkill(String skill) {this.skill = skill;}}

创建测试类Test

java">package com.test.exten;public class Test {public static void main(String[] args) {Teacher t = new Teacher();t.setSkill("唱歌");t.setName("bob");t.setSex('男');System.out.println(t.getSkill());System.out.println(t.getSex());System.out.println(t.getName());}
}

结果 

但是这样创建就会报错

在People中创建有参构造器如下就可以实现这个需求

java">   public Teacher(String name,String skill,char sex) {super(name, sex);this.skill = skill;}

THIS调用兄弟构造器

作用:在构造器中调用本类的其他构造器。

super(...)this(...)必须写在构造器的第一行,而且两者不能同时出现。

多态

概念

多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态。

对象多态:人这个对象可能是学生、老师等

行为多态:老师教书,歌手唱歌等

案例:动物有狼和乌龟(对象多态),但是狼跑的快、乌龟跑的慢(行为多态)

前提

有继承/实现关系;存在父类引用子类对象;存在方法重写。

作用

在多态形式下,右边对象是解耦合的,更便于扩展和维护。

定义方法时,使用父类类型的形参,可以接收一切子类对象,扩展性更强、更便利。
多态下不能调用子类独有功能

多态下的类型转换问题 

注意

需要idea开启注解功能


http://www.ppmy.cn/ops/126174.html

相关文章

【部署篇】Redis-01介绍‌

一、Redis介绍‌ 1、什么是Redis? ‌Redis,英文全称是Remote Dictionary Server(远程字典服务),Redis是一个开源的、使用‌ANSI C语言编写的‌Key-Value存储系统,支持网络、可基于内存亦可持久化。‌ 它提…

【Qt】继承自QItemDelegate的代理类是如何工作的?

在 Qt 中,继承自QItemDelegate的代理类主要使用createEditor 和 setEditorData 方法: 创建编辑器:当用户开始编辑一个项时(例如通过双击一个单元格或者通过其他方式触发编辑),视图会调用委托的 createEdit…

CSS伪元素详解

CSS伪元素详解 一、引言 在CSS中,伪元素是一个非常强大的工具,它允许我们为元素的特定部分添加样式,而无需修改HTML结构。这不仅提高了样式的灵活性,还有助于保持代码的整洁和可维护性。本文将深入探讨CSS伪元素的使用方法和一些…

【论文翻译】HTVGNN:一种用于交通流量预测的混合时间变化图神经网络

题目A Novel Hybrid Time-Varying Graph Neural Network For Traffic Flow Forecasting论文链接https://arxiv.org/pdf/2401.10155v4关键词交通流预测,图神经网络,Transformer,多头自注意力 摘要 实时且精确的交通流量预测对于智能交通系统的…

计算机网络第1章(概述)万字笔记详细版

1.1、计算机网络在信息时代的作用 计算机网络已由一种通信基础设施发展成为一种重要的信息服务基础设施计算机网络已经像水,电,煤气这些基础设施一样,成为我们生活中不可或缺的一部分 我国互联网发展状况 中国互联网络信息中心CNNIC 1.2、…

金融期货市场中的对冲策略及应用

金融期货市场在现代金融体系中扮演着至关重要的角色,为投资者和企业提供了对冲风险的有效工具。对冲策略通过期货合约的买卖,帮助市场参与者减轻价格波动的影响,从而在不确定的市场环境中获得稳定的收益。本文将探讨金融期货市场中的常见对冲…

机器学习:知识蒸馏(Knowledge Distillation,KD)

知识蒸馏(Knowledge Distillation,KD)作为深度学习领域中的一种模型压缩技术,主要用于将大规模、复杂的神经网络模型(即教师模型)压缩为较小的、轻量化的模型(即学生模型)。在实际应…

Visual Studio的实用调试技巧总结

对于很多学习编程的老铁们来说,是不是也像下面这张图一样写代码呢? 那当我们这样编写代码的时候遇到了问题?大家又是怎么排查问题的呢?是不是也像下面这张图一样,毫无目的的一遍遍尝试呢? 这篇文章我就以 V…