当前位置: 首页 > news >正文

对象必须实现 iconvertible_编程体系结构(06):Java面向对象

一、基础概念

1、面向对象概念

面向对象编程的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为。

ce1a1b6da78b60882a3d0ec3bb866567.png

2、类和对象

对象:真实存在唯一的事物;在应用程序中对象是数据和动作的结合体,不仅能够进行操作,同时还能够记录下操作结果。

类:抽象的概念,实际就是对某种类型事物的共性属性与行为的抽取;例如User[名称.年龄.性别]类用来描述用户的基础信息。

Java开发中如何理解面向对象:构建合适的对象接口API体系,创建合适的对象,解决合适的问题,例如JDK的API已经定义好的类,通过这些类创建对象直接使用;通过自定义类来创建对象使用,在MVC中模式中,不同业务功能创建不同的接口和类系统。

3、属性和方法

类中变量

位置区别:

  • 成员变量是定义在方法之外,类内;

  • 局部变量是定义在方法之内。

作用区别:

  • 成员变量的作用是用于描述一类事物的公共属性的。

  • 局部变量的作用就是提供一个变量给方法内部使用而已。

初始值区别:

  • 成员变量是有默认的初始值。

  • 局部变量是没有默认的初始值的,必须要先初始化才能使用。

生命周期:

  • 随着对象的创建而存在,随着对象的消失而消失。

  • 局部变量在调用了对应的方法时执行到了创建该变量的语句时存在,局部变量一旦出了自己的作用域那么马上从内存中消失。

类中方法

对一个类功能的具体描述,可能是类方法或者对象方法;

  • 类方法,又叫静态方法,使用类直接调用,常用工具类;

  • 对象方法,又叫实例方法,使用类对象调用,常见API方法;

构造方法

构造函数的作用是用来给对应的对象进行初始化处理,没有返回值类型的,构造函数的函数名必须要与类名一致,如果一个类没有显式的声明一个构造方法,那么java编译器会为该类添加一个无参的构造函数的,如果一个类已经显式的写上一个构造方法时,那么java编译器则不会再为该类添加一个无参的构造方法,构造函数是可以在一个类中以重载的形式存在多个。

4、接口

接口是一个特殊的类,接口的成员变量默认的修饰符为:public-static-final,接口中的方法都是抽象的方法,默认的修饰符:public-abstract,接口不能创建对象且没有构造方法的,接口是给类去实现时使用的,非抽象类实现接口,必须要把接口中所有方法全部实现。

接口的作用:程序的解耦,定义实现类的约束规范,如果需要拓展特别功能,也可以基于接口形式实现。

类与接口之间关系:多实现关系;接口与接口之间关系:多继承关系。

5、重载与重写

方法重写

父类的功能无法满足子类的需求时,可以进行方法的重写即子父类使用同名的函数,且子类重写的方法使用@Override注解,这里存在继承的关系。

  • 方法名与形参列表必须一致;

  • 子类的权限修饰符必须要大于或者等于父类的权限修饰符;

  • 子类的返回值类型必须要小于或者等于父类的返回值类型;

  • 子类抛出的异常类型要小于或者等于父类抛出的异常类型;

方法重载

在一个类中存在两个或者两个以上的同名函数,称作为方法重载,函数名要一致,形参列表不一致(形参的个数或形参的类型不一致)。

6、包与权限

权限修饰符

权限修饰符就是控制被修饰的成员的范围可见性,分为:public、private、protected、default(没有修饰)。在不同包下面只有public 与 protected 可以访问,而且protected必须是在继承关系下才能够访问。

包package

包可以理解为计算机系统中的文件夹,用来解决类名重复产生冲突的问题,包名全部小写,语句必须位于java文件中中第一个语句。

二、基本特征

封装

把类中内部的实现细节进行隐藏,只暴露对外的接口,例如实际开发场景中一般实体类的所有成员属性(成员变量)都要封装起来,可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问,适当的封装可以让程序代码更容易理解与维护,加强安全性。

继承

在现有父类的基础上在重新构建一个新类即子类,通过子类对象可以访问父类非私有的成员变量和成员方法,以及重写父类中的非私有成员方法,继承的作用就是能提高代码的复用性。

多态

多态指一个对象可以具备多种形态,例如:父类的引用类型变量指向了子类的对象;接口的引用类型变量指向了接口实现类的对象;这种情况是存在于继承或者实现关系中,多态情况下,子父类存在同名的成员变量时,访问的都是父类的成员,除了在同名非静态函数时才是访问子类的。

三、常用关键字

1、This关键字

this关键字代表了所属函数的调用者对象,如果存在同名成员变量与局部变量时,在方法内部默认是访问局部变量的数据,可以通过this关键字指定访问成员变量的数据,在一个构造函数中可以调用另外一个构造函数初始化对象。

2、Static关键字

static修饰成员变量:如果有数据需要被共享给所有对象使用时,那么就可以使用static修饰。

static修饰成员函数:该静态方法不依赖于任何对象就可以进行访问,非静态成员方法/变量都必须依赖具体的对象才能够被调用。

static修饰代码块:static关键字用来包装静态代码块以提升程序性能,静态代码块可以置于类中的任何地方,在类初次被加载的时候,会依次执行一次每个静态代码块。

3、Super关键字

super关键字代表了父类空间的引用,子父类存在着同名的成员时,在子类中默认是访问子类的成员,可以通过super关键字指定访问父类的成员;创建子类对象时,默认会先调用父类无参的构造方法,可以通过super关键字指定调用父类的构造方法。

4、Instanceof关键字

instanceof关键字的作用:判断一个对象是否属于指定的类别,对象与指定的类别必须要存在继承或者实现的关系。在强制类型转换之前通常会使用该关键字先判断,然后在进行转换。

5、Final关键字

final修饰类:表明该类不能被继承,final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

final修饰方法:锁定方法防止任何继承类修改它的含义;第二个原因是效率,父类的final方法是不能被子类所覆盖的。

final修饰变量:成员变量被标识为常量,只能被赋值一次,赋值后值不再改变,当函数的参数类型声明为final时,说明该参数是只读型的。

6、Abstract关键字

abstract修饰类:该抽象类不能被实例化,抽象类与接口的不同之处,接口中不能有实例方法去实现业务逻辑,而抽象类中可以有实例方法,并实现业务逻辑,抽象类不能使用final关键字修饰,因为final修饰的类是无法被继承,而对于抽象类来说就是需要通过继承去实现抽象方法。

abstract修饰方法:抽象方法没有方法主体,与接口方法有点类似,抽象方法不能用private修饰,因为抽象方法必须被子类实现,抽象方法也不能用static修饰,抽象类.抽象方法这样的操作没有意义。

四、场景分析

1、设计模式

面向对象与设计模式是之前几年很火热的概念,面试时必问的问题,在编程中想用好设计模式,前提理解面向对象机制,都是对问题的高度向上抽象封装,向下逐层解决实现,提高代码的复用性、可读性、灵活性、可维护性强,最主要是格调高。

2、IO流体系

如果想理解面向对象和设计模式的代码,在Java中可以重点读读IO流体系的API,顶级接口,向下实现,包装类,扩展类,是真的把这两大理念用到极致了,当然IO流最为文件处理的核心,也值得读读源码。

3、MVC开发模式

在MVC的开发模式中,业务层接口,业务层实现;数据库接口,数据访问实现,也是面向对象的最基础用法接口与接口的实现类。

五、源代码地址

GitHub·地址
https://github.com/cicadasmile
GitEE·地址
https://gitee.com/cicadasmile

138b2d79e9168d68f0d832e088825808.png

相关文章:

  • SYN-PROXY
  • kafka 创建topic_雅虎开源!可视化的Kafka监控管理工具
  • SYN-GATE
  • youtube python enty_python GUI尝鲜(但当涉猎,见往事耳)
  • Windows Mobile下在开始菜单增加应用程序快捷方式的两种办法
  • solidworks版本转换器_SOLIDWORKS | SOLIDWORKS? 2021 新增功能 —3D CAD
  • DeepEarth中的几何图形基础框架模型
  • C/C++ 宏带来的奇技淫巧
  • vim 全局替换_推荐一些VIM操作技巧
  • zookeeper 分布式锁_zookeeper分布式锁最完美实现Curator剖析
  • 南昌
  • 思科wlc产品文档_基于Catalyst 9800 无线控制器的思科OEAP远程办公解决方案
  • 留记
  • ubuntu golang指定glibc版本_Go Lang 开发笔记《使用 Go Lang 搭建一个 Web 服务!》
  • 装机后进不了bios_是生产力也是游戏主力,12.7升A4风冷小钢炮装机体验
  • 【css3】浏览器内核及其兼容性
  • CEF与代理
  • create-react-app项目添加less配置
  • express如何解决request entity too large问题
  • HTML中设置input等文本框为不可操作
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JavaScript类型识别
  • js算法-归并排序(merge_sort)
  • Magento 1.x 中文订单打印乱码
  • PAT A1050
  • Spring框架之我见(三)——IOC、AOP
  • spring学习第二天
  • vue 配置sass、scss全局变量
  • windows下使用nginx调试简介
  • 开源地图数据可视化库——mapnik
  • 微信开放平台全网发布【失败】的几点排查方法
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • gunicorn工作原理
  • 阿里云API、SDK和CLI应用实践方案
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # 达梦数据库知识点
  • #1014 : Trie树
  • #define
  • #NOIP 2014# day.1 T2 联合权值
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (floyd+补集) poj 3275
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)ssm码农论坛 毕业设计 231126
  • (四)鸿鹄云架构一服务注册中心
  • (四)汇编语言——简单程序
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET Reactor简单使用教程