本文源码:GitHub·点这里 || GitEE·点这里

一、基础概念

1、面向对象概念

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

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

推荐阅读:编程体系整理

序号 项目名称 GitHub地址 GitEE地址 推荐指数
01 Java描述设计模式,算法,数据结构 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
02 Java基础、并发、面向对象、Web开发 GitHub·点这里 GitEE·点这里 ☆☆☆☆
03 SpringCloud微服务基础组件案例详解 GitHub·点这里 GitEE·点这里 ☆☆☆
04 SpringCloud微服务架构实战综合案例 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
05 SpringBoot框架基础应用入门到进阶 GitHub·点这里 GitEE·点这里 ☆☆☆☆
06 SpringBoot框架整合开发常用中间件 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
07 数据管理、分布式、架构设计基础案例 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
08 大数据系列、存储、组件、计算等框架 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆

编程体系结构(06):Java面向对象的更多相关文章

  1. Java 面向对象编程——第一章 初识Java

      第一章    初识Java 1.  什么是Java? Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以其强安全性.平台无关性.硬件结构无关性.语言简 ...

  2. Java面向对象 网络编程 下

    Java面向对象 网络编程  下 知识概要:                   (1)Tcp 练习 (2)客户端向服务端上传一个图片. (3) 请求登陆 (4)url 需求:上传图片. 客户端:   ...

  3. Java面向对象 网络编程 上

     Java面向对象 网络编程 上 知识概要:                     (1)网络模型 (2)网络通讯要素 (3)UDP TCP 概念 (4)Socket (5)UDP TCP 传输 ...

  4. Java面向对象编程基础

    一.Java面向对象编程基础 1.什么是对象?Object 什么都是对象! 只要是客观存在的具体事物,都是对象(汽车.小强.事件.任务.按钮.字体) 2.为什么需要面向对象? 面向对象能够像分析现实生 ...

  5. java 面向对象编程。。。。

    经过一周的学习(java),总结了许多,对java的理解,java的类型,运用,安装,基础语法,变量,常量,表达式,语句 java从C语言中继承了大量语言特性.java面向对象编程的基本特征,包括继承 ...

  6. 面向对象的编程思想和Java中类的概念与设计

    面向对象的编程思想学习,面向对象内容的三条主线;1.java类及类的对象2.面向对象的三大特征3.其他关键字学习内容:3.1面向对象与面向过程面向对象与面向过程在应用上的区别 Java中类的概念与设计 ...

  7. 《Java面向对象编程》

    <Java面向对象编程> 第11章 对象的生命周期 11.1  创建对象的方式 用new语句创建对象 运用反射手段,调用java.lang.Class 或者 java.lang.Const ...

  8. JAVA面向对象编程课程设计——网络版单机斗地主

    一.团队介绍 成员姓名 任务分配 成员课程设计博客链接 兰泽祥(组长) 数据库,斗地主规则的实现,人机自动出牌的算法,实体类的设计 JAVA面向对象编程课程设计--web版斗地主 吴修恩 JSP界面的 ...

  9. JAVA面向对象编程课程设计——web版斗地主

    一.团队课程设计博客链接 JAVA面向对象编程课程设计--网络版单机斗地主 二.个人负责模块或任务说明 实体类的设计 斗地主规则的实现 人机自动出牌的算法 实现数据库的DAO模式 三.自己的代码提交记 ...

随机推荐

  1. android开发之当设置textview多少字后以省略号显示。限制TextView的字数

    设置多少字后以省略号显示 <TextView    android:id="@+id/tv"   android:layout_width="wrap_conten ...

  2. vue打包之后找不到图片路径,打包项目时,dist文件夹内部分图片找不到

    1.打包项目时,会默认把存放在public内的小于4k的图片转换成base64,作为内联样式. 可以在vue.config.js中修改默认大小,在chainWepack:config=>{}中添 ...

  3. shader效果

    Unity Shader - 消融效果原理与变体 https://www.jianshu.com/p/d8b535efa9db

  4. Unity插件介绍——Odin

    今天把玩了一款最近的热门插件——“Odin - Inspector and Serializer”,其功能强大到让人无语,简直是开发利器,屠龙宝刀!它的功能是扩展Inspector显示,它重写和增加了 ...

  5. python小白入门基础(四:浮点型和布尔型)

    # Number (int float bool complex)# (1) float 浮点型 也就是小数# 表达方式一floatvar = 0.98print(floatvar)print(typ ...

  6. Codeforces 1337C Linova and Kingdom

    题意 给你一颗有根树,你要选择\(k\)个点,最大化\(\sum_{i \in S} val_i\),其中\(S\)是被选点的集合,\(val_i\)等于节点\(i\)到根的路径上未被选择点的个数. ...

  7. Codeforces 1321D Navigation System

    题意 有个人要从\(s\)走到\(t\),经过的路径给定.导航系统每次会显示当前节点到\(t\)的最短路,有多条就显示其中之一.这个人如果按照导航走,那么啥都没变.如果没有按导航走导航就会重新导航.问 ...

  8. Spring JPA 定义查询方法

    Spring JPA 定义查询方法 翻译:Defining Query Methods ​ 存储库代理有两种方式基于方法名派生特定域的查询方式: 直接从方法名派生查询 自定义查询方式 ​ 可用选项基于 ...

  9. 01_Python基础知识梳理

    1.计算机知识基础 1.计算机组成 计算机底层: 点子电路,计算机只能识别两个数 0 1         硬件: 处理器(CPU), 运行内存(RAM), 主板(总线设备), 外部存储设备(硬盘U盘等 ...

  10. Zabbix 5.0切换中文语言小结

    最近测试Zabbix 5.0,去修改语言时发现不能选择"Chinese(zh_CN)",这个选项在下拉框中是灰色的(无法选择).提示"You are not able t ...