面向对象(多态)-第一阶段-第九天-2021-07-23

2024-02-25 18:08

本文主要是介绍面向对象(多态)-第一阶段-第九天-2021-07-23,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

多态2

一.类和类之间的依赖关系

依赖是类和类之间的一种非常常见的关系
比如:程序员 依赖 电脑 人 依赖 交通工具
但是有些依赖关系容易混淆,比如是遥控器依赖电器不是电器依赖遥控器
因为遥控器离开了电器,那么它的存在就没有意义
但是电器一旦打开,即使不依赖遥控器它也能正常工作,比较电器的共工作是通过其本身的线路和工作器件完成,而不是遥控器。

存在强依赖关系和弱依赖关系,通过实例来说明
比如:
出租车司机对车就是一个强依赖的关系(出租车司机的很多行为都是离不开车的存在,所以是强依赖关系)强依赖关系一般在类中用成员来引用
学生对车就是一个弱依赖的关系(学生只是在需要的时候偶尔用一下车而已就是弱依赖关系)弱依赖关系一般在类中只需要在行为(方法)的形参里面引用

//针对依赖关系比较弱的时候
public class Student {//旅行 public void goHome(Car car) {		car.run();System.out.println("回老家用车。。。");		}
}
//针对依赖程度比较强的情况
public class TaxiDriver {private Car car;public TaxiDriver (Car car) {this.car=car;}public TaxiDriver () {}//旅行public void travel() {		car.run();System.out.println("出租车司机在旅行...");		}//工作public void work() {car.run();System.out.println("在工作载客...");}}

对象之间存在联系(依赖关系),从一个好的软件设计的角度来说,我们希望这种依赖关系不要过于紧密(耦合过高),理想情况我们希望这种耦合变成0 ,问题发生的原因:因为车(被依赖方)的变化造成人(依赖方)也发生巨大的变化,严重违背了软件设计的开闭原则

小技巧:在子类重写的方法的上面加上一个注解:@override,作用是在编译期起到一个语法检查的作用,也可以使用开发工具中提供的快捷键进行操作

@Override
public void run1() {System.out.println("轿车在路上跑....");
}

解耦的原则:依赖倒置 我们不要直接去依赖具体,尽量去依赖抽象,因为抽象的东西比具体的东西更加稳定,我们依赖的一方稳定了我们自身才能变得更加稳定

二.abstract关键字的使用

如果一个方法无法实现,可以将这个方法定义为抽象方法,在方法声明时使用abstract关键字对该方法进行修饰

抽象方法才能没有方法体

抽象方法必须定义在抽象类中,抽象方法不能有方法体

public abstract void run() ;

子类继承了一个抽象的父类,必须对父类中定义的抽象方法进行强制实现,除非这个子类自己本身也是抽象的

public class Ship extends Vehicle{@Overridepublic void run() {System.out.println("船在水中游...");}
}
//子类自己也是抽象的
public abstract class FlyableVehicle  extends Vehicle{}

抽象类无法实例化对象

Vehicle vehicle=new Vehicle();//报错
抽象的概念在实际生活中根本就没有对应对象

抽象方法必须位于抽象类,但是抽象类中可以存在非抽象的方法

问题:抽象的父类中针对具体的某个方法是设计成抽象的还是具体的?

所有员工都有一个共同的行为:上班打卡 ,打卡的方法应该定义父类Employee中,问题:打卡是设计为抽象方法还是具体的方法?

  • 三种员工:打卡的时间各不相同 8 :00 9:00 10:10
  • 五种员工:4种都是9点 只有1种员工12点打卡

父类中普通的方法作为子类来说有选择性的去重写,父类中抽象方法要求所有的子类必须强制重写

这篇关于面向对象(多态)-第一阶段-第九天-2021-07-23的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/746273

相关文章

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

JavaSE——封装、继承和多态

1. 封装 1.1 概念      面向对象程序三大特性:封装、继承、多态 。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节 。     比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器, USB 插孔等,让用户来和计算机进行交互,完成日常事务。但实际上:电脑真正工作的却是CPU 、显卡、内存等一些硬件元件。

Java基础回顾系列-第九天-数据库编程

Java基础回顾系列-第九天-数据库编程 数据库简介工具包java.sql API 内容与数据库建立连接执行SQL语句数据库检索和更新查询结果SQL类型对应Java类型映射元数据异常 API方法DriverManagerConnectionStatementPreparedStatementCallableStatementResultSetjava.sql.Date批处理、存储过程、事务

ffmpeg面向对象-待定

1.常用对象 rtsp拉流第一步都是avformat_open_input,其入参可以看下怎么用: AVFormatContext *fmt_ctx = NULL;result = avformat_open_input(&fmt_ctx, input_filename, NULL, NULL); 其中fmt_ctx 如何分配内存的?如下 int avformat_open_input(

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

07 v-if和v-show使用和区别

划重点: v-ifv-show 小葱拌豆腐 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="

2021-8-14 react笔记-2 创建组件 基本用法

1、目录解析 public中的index.html为入口文件 src目录中文件很乱,先整理文件夹。 新建components 放组件 新建assets放资源   ->/images      ->/css 把乱的文件放进去  修改App.js 根组件和index.js入口文件中的引入路径 2、新建组件 在components文件夹中新建[Name].js文件 //组件名首字母大写

2021-08-14 react笔记-1 安装、环境搭建、创建项目

1、环境 1、安装nodejs 2.安装react脚手架工具 //  cnpm install -g create-react-app 全局安装 2、创建项目 create-react-app [项目名称] 3、运行项目 npm strat  //cd到项目文件夹    进入这个页面  代表运行成功  4、打包 npm run build

chapter06 面向对象基础 知识点Note

文章目录 前言类的设计 属性和行为对象的内存解析 (堆 栈 方法区)类的成员之一 变量(属性) field类的成员之二 方法 method对象数组方法重载 overload可变个数的形参 语法糖方法的值传递机制递归关键字package importMVC设计模式import导入面向对象特征之一 封装类的成员之三 构造器JavaBeanUML类图 前言 ` 面向对象封装 面向

华为23年笔试题

消息传输 题目描述 在给定的 m x n (1 <= m, n <= 1000) 网格地图 grid 中,分布着一些信号塔,用于区域间通信。 每个单元格可以有以下三种状态:  值 0 代表空地,无法传递信号;  值 1 代表信号塔 A,在收到消息后,信号塔 A 可以在 1ms 后将信号发送给上下左右四个方向的信号塔; 值 2 代表信号塔 B,在收到消息后,信号塔 B 可以在 2ms