1. 面向对象

1.1 多态

1.1.1 软件设计六大原则

1 单一职责原则

原则思想 : 一个方法只做一件事,一个类只负责一个职责,这样当前职责改动,不会对其他程序产生影响

常识原则,几乎所有程序员都会遵循这个原则

优点 : 降低类和类之间的耦合度,提高可读性,可维护性,可扩展性,降低可变性的风险

2 里氏替换原则

原则思想 : 能使用父类的地方,就一定可以使用子类

子类还可以扩展父类的功能,但是不能更改父类的功能,并且子类还可以有自己特有的功能

优点 : 增加了程序的健壮性,即使有了新的子类,原子类不受影响,可以正常执行

3 依赖倒置原则

原则思想 : 高层次不应该依赖低层次,都应该依赖于抽象

优点 : 拥抱多种变化,可以减少需求变化带来的工作量

4 接口隔离原则

原则思想 : 类和接口之间应该建立在最小接口上

5 迪米特法则

原则思想 : 又称为最少知识原则,一个对象尽可能的少了解其他对象

一个类中尽量减少对其他类的依赖

6 开闭原则

原则思想 : 对修改关闭,对扩展开放

尽量通过扩展软件实体来解决需求的变化,而不是通过修改已有的代码来完成变化

1.1.2 是什么

什么是多态:

多态就是里氏替换原则的一种体现

能使用父类的地方就一定可以使用子类

多态  就是  父类引用指向子类对象

父类引用:使用父类类型 创建的引用类型变量

指向:通过这个引用可以找到谁

通过父类创建的一个引用类型变量 ,找到了子类的对象

父类类型   变量名  =   new   子类();

Animal a = new Cat();多态

1.1.3 怎么用

多态的几种形式:

1 直接多态: 父类 变量 = new 子类();

2 形参/实参: 参数列表用父类声明,调用方法 传递子类对象

3 返回值多态: 返回值类型是父类类型,但返回的对象 是子类对象

1.1.4 为什么这么用(优点)

1.1.5 缺点

丢失子类特有的属性

1.1.6 向下转型

多态:又叫向上转型

子类到父类  是向上

父类到子类   是向下

想要向下转型  必须先发生向上转型

1.1.7 多态属性调用

多态进行属性调用:

1.父类没有的,都调用不了(因为多态缺点,丢失子类特有的属性)

2.父类有的,子类没有的, 执行父类

3.父类和子类都有,除了成员方法执行子类,其他全部执行父类(因为只有成员方法可以覆写)

1.1.8 比较隐秘的多态

this保存的是子类的内存地址,因为用哪个对象调用的这个方法,this就指向谁

this是对象中第一个成员变量保存当前对象的内存地址

既然是变量肯定有类型,可以保存当前类对象的类型有

1当前类类型(this所在的类就是当前类)

2父类类型(多态缺点:丢失子类特有的属性)

而this可以调用当前类中特有的属性所以this的类型应该是当前类类型

this在哪个类哪个类就是当前类而现在这个程序this在Sup_04类中
所以就等于是Sup_04 this;

而谁调用的这个方法this就指向谁这个m1方法最终是由new Sub_04()调用的.所以this指向new Sub_ 04()

相当于: Sup_04 this = new Sub__04();

总结:通过子类,调用父类的方法的时候此时父类这个方法中的上下文环境就是多态环境

1.2 抽象

1.2.1 概述

抽象:抽象类往往表示设计中得出的抽象概念

比如动物,它只是一一个抽象的概念并没有具体的一个东西叫动物,所以它并不能代表-一个实体

这种情况下我们就适合把他作为一一个抽象类

比如Animal表示所有动物,但是没有一个具体东西叫动物,

它可以作为所有动物的祖类,可以把所有动物共有的属性和行为保存到Animal中

然后再有Cat , Dog之类的具体的动物类,都继承Animal类并且Cat还具有他们特有的属性

那么此时Cat表示猫,而一个Cat对象就表示具体的某一个猫

但是Animal不应该有对象因为没有一个东西是叫动物,动物是-一个统称

那么此时Animal就适合作为抽象类

abstract :修饰符修饰的类是抽象类,修饰的成员方法是抽象方法

抽象方法 :使用abstract修饰的成员方法并且该方法没有方法体,就是没有大括号

抽象类:不能被实例化,只能用于被继承

abstract :修饰符修饰的类是抽象类修饰的成员方法是抽象方法

抽象方法:使用abstract修饰的成员方法,并且该方法没有方法体,就是没有大括号

抽象类:不能被实例化只能用于被继承

-般抽象类中,有功能的定义,但是没有功能的实现要求必须让子类覆写

比如我们的Animal和Cat使用多态可以降低耦合度但是Animal中,只需要有move的方法不需要有具体的实现

因为具体实现应该由Cat实现但是Animal中还必须得有,要么多态使用不了,丢失子类特有的属性

但是如果Animal中写了move方法,那么子类中覆写不覆写都可以根本没办法强制要求

这个时候可以再Animal中编写-个抽象方法但是抽象方法必须要在抽象类中的

所以继承这个抽象类之后,必须要实现抽象类中的所有抽象方法

实现:子类对抽象方法加上方法体完成功能实现

含有抽象方法的类型-一定是抽象类正确

抽象类中-定含有抽象方法错误

抽象类和普通类几乎完全一样,只有两点不同

1不能创建对象

2可以有抽象方法

非抽象类继承抽象类必须实现所有的抽象方法

抽象类继承-个抽象类可以实现0~N个抽象方法

1.2.2 语法

1.2.3 注意

abstract 和 final 不能同时出现

abstract 修饰的类 是抽象类 , 就是用来被继承的  而 final 修饰的类  不能被继承

abstract 修饰的方法 是抽象方法, 而抽象方法 就是用来被覆写实现的,而final、修饰的成员方法 不能被覆写

1.3 接口

1.3.1 概述

引用数据类型:类数组接口

接口是- -种引用数据类型,可以看做是一个特殊的类是为了解决java中单继承功能变弱问题

个类只能继承一个父类但是可以实现N个接口

1 [修饰符] interface接口名{}
*

2 1.8之前接口中只有抽象方法和常量(public static final)

-2147483648~2147483647

3接口中public static fian!还有abstract都可以省略(接口中没有变量只有常量写个方法就是抽象方法)

4接口没有构造方法,不能创建对象

5一个类实现一个接口,需要实现所有的抽象方法

6一个抽象类实现- -个接口,需要实现0~ N个抽象方法

1.3.2    1.8 接口新特性

新特性:

1.8之前只能有抽象方法

1.8开始可以有静态方法和默认方法(可以理解为类中的成员方法)

1.9开始支持private方法

1.3.3 怎么用

多实现

类和接口直接是多实现保留类继承,所以当抽象类和接口都能满足需求的时候,优先使用接口

一个非抽象类实现接口后,需要实现所有抽象方法

一个抽象类实现接口后需要实现0~ N个抽象方法

Day13 多态、Object、抽象、接口相关推荐

  1. ❤️什么是Java 面向对象《装、继承、多态、抽象》?建议收藏)❤️

    Java 面向对象(详解) 一.面向对象 (1).面向对象编程(Object-Oriented Programming,OOP) (2).面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装 ...

  2. java 抽象封装多态_java面向对象(封装,继承,多态,抽象,接口的定义和实现)...

    1.封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定 ...

  3. 第三周 Java语法总结__static关键字__代码块__继承__this和super的区别__重写__final关键字__多态__抽象__接口__形参问题__包__权限修饰符__内部类

    文章目录 6.static关键字 1)静态static关键字的特点: 2)关于static关键字的使用注意事项 3)什么时候将变量定义为成员变量: 7.文档说明书: 8.代码块 9.继承 1)继承的概 ...

  4. java 接口,接口的特性,接口实现多态,面向接口编程

    package cn.zy.cellphone; /**接口是一种引用数据类型.使用interface声明接口,形式* 形式:public interface 接口名称{}* 接口不能拥有构造方法,不 ...

  5. 五.抽象接口与依赖反转(C面向对象开发)

    内容参考于<抽象接口技术和组件开发规范及其思想> 五.抽象接口与依赖反转 基于多态可以实现"与硬件无关"的应用程序. 在 C 编程中,多态的核心解决方法是充分利用&qu ...

  6. Java基础-OOP特性之封装、继承、多态、抽象

    为什么80%的码农都做不了架构师?>>>    //要习惯将程序(功能.代码)模块化 //OOP四大特性:封装.继承.多态.抽象 //OOP的核心:封装一个类,把数据抽象出来,再把方 ...

  7. java 抽象接口_JAVA中的“抽象接口”

    在程序设计过程中,读者很可能遇到这样一种困境:设计了一个接口,但实现这个接口的子类并不需要实现接口中的全部方法,也就是说,接口中的方法过多,对于某些子类是多余的,我们不得不浪费的写上一个空的实现. 今 ...

  8. JAVA中的“抽象接口”

    在程序设计过程中,读者很可能遇到这样一种困境:设计了一个接口,但实现这个接口的子类并不需要实现接口中的全部方法,也就是说,接口中的方法过多,对于某些子类是多余的,我们不得不浪费的写上一个空的实现. 今 ...

  9. libuv抽象接口简单梳理

    libuv抽象接口简单梳理 抽象类型 libuv虽然看起来代码没有几行,但是初略过了下文件,功能非常丰富,至少比boost.asio功能要多得多,当前只分析几个基础类型和网络相关的类型. UVErro ...

最新文章

  1. python需要php吗-学python需要学linux吗
  2. linux mint 时间不对,LinuxMint 20:发布日期和新功能
  3. ios 不同的数据类型转化为json类型
  4. js检测是否安装了flash插件
  5. (原创)结构体自动化转为char数组的实现
  6. 文本分类问题不需要ResNet?小夕解析DPCNN设计原理(下)
  7. 2017.4.24 聪明的质检员 思考记录
  8. 小米2怎样启动ANdroid?,小米2S如何打开后盖? 小米手机开盖技巧介绍(小米手机通用)...
  9. electron 使用json作为本地存储_使用腾讯云对象存储 COS 作为 Velero 后端存储,实现集群资源备份和还原...
  10. No such file or directory
  11. 普通计算机用的是什么屏幕,电脑显示器什么面板最好?IPS/TN/PLS/VA面板的显示器区别...
  12. web服务器共享文件夹,局域网web共享文件夹的方法
  13. 【企业微信】自建应用可信域名验证
  14. 金蝶K/3 ERP 多源取价BOM成本
  15. linux常用c函数(中文版)
  16. 2021年中国亚马逊耳环市场趋势报告、技术动态创新及2027年市场预测
  17. 中国最优秀、最强的基金公司有哪些
  18. kali安装tools,和文件传输工具fuse问题合集
  19. 一键seo提交收录_关于SEO行业中的某些信息,你究竟应该相信谁?又或者谁都不要信!...
  20. 孙子兵法(Unicode有的所有字都已录入,还有它字疑为误传)

热门文章

  1. PDF转PPT怎么转?原来这个方法可以免费转
  2. 如何给PDF制作左侧显示的目录或书签?
  3. U盘重新量产,PE与ubuntu共存
  4. XML解析之xsi:nil=true
  5. C语言如何实现任意数相乘
  6. 盘点IT业年度十大关键词:2009年在偷菜中溜走
  7. 小分子化合物的蛋白靶点(蛋白质、酶、受体) + IC50、EC50、Ki 是什么?
  8. 老师计算机组合照说说,适合教师发朋友圈的说说:年轻的老师,一直在学习的路上...
  9. Gitlab CI/CD Sonar 集成简版
  10. 三种循环实习九九乘法表、实现其他例子