从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易?

Java架构没有996
• 阅读 1535

前言:

  • 1)java 面向对象语言,面向过程围绕过程(解决问题步骤),面向对象围绕实体(名词,特性(属性),行为(动作、方法))。它们设计思想区别在于关心核心不同的。

主流都是面向对象的。

实际开发,先按面向对象思想进行设计,具体实现时面向过程(人习惯)

  • 2)java 怎么支持面向对象呢?

a. 万物皆对象,所有的类都是 Object 子类

b. java 中支持单继承,多重继承,Tiger 是 Animal 子类,Animal 是 Object 的子类。满足单继承(每次都一个父类,超类)

c. 面向对象的 4 大特性:封装、继承、多态、抽象

  • 3)封装的优点

a. 隐藏细节,开发者关注内容就少,好写代码,

b. 安全,你不需要知道我内部实现细节,private 修饰后,外部不能访问。

c. 方便修改,私有,外部不能访问,修改不影响其他类(送耦合)

  • 4)继承

a. extends 继承

a.1 继承实现类 class

a.2 继承抽象类 abstract class (必须有抽象方法,子类去实现)

b. implements 实现

实现接口 interface (里面全是抽象方法,子类去实现)

面向对象

  • 1)面向过程(早期)、面向对象(主流)、面向服务(SOA、微服务)(主流,在面向对象基础上)

  • 2)面向过程和面向对象的区别?

编程思想,做一件同样事情,做的思路不同。

思路不同在哪里?

例子:把大象放到冰箱里。(本意:把公大象放到格力冰箱中)需求变更

面向过程:开发步骤(流水账) a. 把冰箱门打开

  • b. 把什么放进去:大象

  • c. 把大象放入冰箱

  • d. 把冰箱门关上

找出主体:名词(冰箱、大象),围绕它做事

找出动作:动词(打开、放入、关上),强调过程

面向过程:找出把名词主体,和动作(动词)连接起来,最后怎么完成整个过程!

面向对象:

  • a. 找出主体(名词:冰箱、大象)

  • b. 创建模型:(额外考虑,感觉画蛇添足)

冰箱:容大、颜色、品牌、耗电、打开、关上

大象:产地、公母、皮、腿

  • c. 执行步骤

打开冰箱,把大象放入冰箱,关上门

它考虑额外事情,目前为止用户不关心。

在实际开发中,用户不遵守他的话,他说的话不算数。

实际开发中,无法完全(合同),无法严格按合同执行,开发者就必须适应用户的需求变更。

从这一实际角度出发,面向过程思考好还是面向对象思考好!

如果按照面向过程思考,它不能适应用户需求变更,要修改代码,加班加点完成。前面考虑不够完善。

如果按照面向对象思考,它提前考虑很多细节,超过用户要求,表面上多考虑了,但是当用户需求变化,刚好就在我们多考虑范畴中!代码不需改,改动量很少。按期完成,无需额外资金投入。

面向对象要考虑很多,考虑范围,不能太广,过度设计。设计都需要人力物力。

有一个平衡点,设计多大范围合适呢? 系统分析师(高薪!)8 年

到超市购买商品

第一次用户提出需求:要购买白酒和花生米

第二次用户提出需求:要购买白酒和花生米,买猪头肉(需求变更)

第三次用户提出需求:+ 凉菜

用户变化 n 次

面向过程:

1)到哪个超市

2)挑选商品(白酒、花生米)2 种,

3)购买,结束

每次需求都要改,有可能之前代码框架都无法适应新需求,翻天覆地重做。

面向对象:

1)都有哪些超市,都有哪些商品,对超市商品全部建模 2000 种商品

2)到某个超市,挑选商品(白酒、花生米、猪头肉、凉菜)

3)购买,结束

总的来说:面向对象优于面向过程设计,主流设计思想面向对象设计!

java 是怎么支持面向对象设计的?

java 面向对象,c 面向过程,c++面向对象,python 面向对象,javascript 面向对象,vue 框架面向对象

java 四大特性:围绕面向对象而言:封装、继承、多态、抽象

封装

面向过程过程中每个细节都需要开发者去了解,封装改变这样方式,它先进行建模,把名称创建对象,设置它的属性(代表这个事物的特点)和方法(表现一些动作)

把生活中的物品抽象成 java 中的对象

对象为了简单,有些内容对外暴露,有些内容隐藏。隐藏就体现了封装。

例子:手机

如果知道手机所有细节,我们现在都用不上手机。

  • 1)对外暴露:屏幕、键盘、话筒、耳机、充电器
  • 2)隐藏:怎么通讯,运行 app

对有些内容使用者是不关心它的内部实现,手机把这些内容进行封装,用户使用就简单了。

代码如何实现封装呢?

有些功能用户不能去访问,用户不需要知道内容封装。

它需要知道,我们会单独给它接口 api

手机: 1)创建一个类:Phone

2)类中封装,对外看不到,创建属性 call、keys,私有 private (体现了封装)

3)对外暴露:怎么开发 call,怎么开发 keys?公有 public

package cn.tedu.oop;
//模拟手机建模(建立模型)需求中的名词
public class Phone {
//成员变量,可以在多个方法中直接调用
private String call; //模拟打电话特性
private String keys; //模拟手机键盘特性
//如何对外暴露私有的属性,对其进行操作。
//使用getXxx(获取)和setXxx(设置)方法来操作私有属性
//这个业界的规范,开发工具都直接支持自动产生对应属性的get和set方法
//私有属性外部不能访问,但在类的内部的方法可以直接访问
public String getCall() {
return call;
}
//外部怎么去设置成员变量值呢?setCall方法的参数
public void setCall(String call) {
//前面成员变量,后面是参数,参数就保存了用户设置值,
//以后用户使用get方法就可以获取新的值
//参数名和成员变量的名称重复,怎么区分谁是谁呢?
//this.value就可以区分,this代表本类,对象,this.value代表成员变量,就不是参数名
this.call = call;
}
public String getKeys() {
return keys;
}//加入Java开发交流君样:756584822一起吹水聊天
public void setKeys(String keys) {
//警察,监听电话,
//用户只管调用setKeys方法,它并不知道这块代码
if( keys.equals("110") ) { //判断keys值是否为110
System.out.println("通知警察");
}
this.keys = keys;
}
}

从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易?

封装的好处

1)把不让外界知道的信息就隐藏起来,外部无法操作。代码比较安全,外部无法操作。

2)代码只能内部处理。当代码修改,所有调用地方都要随之改变,这种结构紧耦合。如果代码只能内部修改,修改后,外部丝毫不影响,这种结构松耦合。程序能实现松耦合就松耦合。封装就实现松耦合结构。内部修改不影响其他代码。

3)封装后,里面程序实现细节,对应调用者来说不关心,只关心如何使用。把复杂问题变简单。

继承

什么叫继承?

java 中继承和生活继承是一样一样的。父类(父亲)和子类(自己)。父亲父亲,子类子类。

java 继承单继承,c 语言允许多继承(c 语言代码质量出错,很难找的其中一个原因)。从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易? 结论:java 中单继承,但是可以多层

java 中如何实现继承关系?

实现继承关系提供 2 个方式:

1)extends 关键字(继承):语法 extends 后面跟类(class 实现类、abstract class 抽象类)

Tiger extends Animal

Eagle extends Animal

特点:Animal 是一个实现类,它具体实现 eat 方法

抽象类特点:它有部分实现(父类自己实现)和部分规定不实现的(子类去实现)

Tiger extends AbstractAnimal(抽象类中有抽象方法,抽象方法父类不实现,压到子类去实现)

2)implements 关键字(实现):语法 implements 后面跟接口(interface)

接口特点:所有方法都是抽象方法,一点活都不干,它指手画脚(它要规定子类实现方法)

为什么要使用继承?

我们可以从父类继承它的属性和方法,在子类中直接调用父类资源(属性和方法),方法和属性都是 public。从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易? 从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易? 通过对上面两个类的观察:

1)它们有共性,eat 方法一样

2)它们有个性,Tiger 类它有自己的 run()方法,Eagle 类它有自己的 fly()方法。

有共性有不同!从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易? 缺点:

共性的方法,出现在多个类中,如果业务需要修改,要修改多处,工作量大,容易造成失误,这个类改,那个类

忘改,造成结果不一致!

继承

解决办法?就是继承!

1)要把共性方法抽取出来,放到一个单独类中 Animal

2)把共性方法就从当前类中删除

3)两个类连接起来,使用继承,Tiger extends Animal,可以在子类中直接访问父类方法 eat() 从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易? 从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易? 从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易?

抽象类

从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易? 从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易? 从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易?

接口

从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易? 从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易? 从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易?

实现类和抽象类和接口区别

从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易?

为什么需要抽象类?

学框架,框架中很多抽象类。例如:spring 框架

框架要做很多底层公用事情,让我们写代码利用框架,程序更加健壮,更加安全,

业务需求私有事情,还得我们去实现

公用框架实现,私有我们自己实现,我们自己写代码怎么和框架对接。框架进行规定!

规范私有类(抽象方法声明)

为什么需要接口?

提倡面向接口开发,你可以实现接口,别人可不可以接口。

java JDBC 数据库一套规范,java 自身规定接口,其他厂商去实现

mysql 数据库厂商,Mysql 的实现;oracle 数据库厂商,oracle 的实现。

小结

今日给大家分享的是面向对象,这对于很多小白来说很友好的,大家都能看得懂! 生命不止坚毅鱼奋斗,有梦想才是有意义的追求 给大家推荐一个免费的学习交流群: 最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。 Java开发交流君样:756584822

点赞
收藏
评论区
推荐文章
隔壁老王 隔壁老王
1年前
我的golang笔记
面向对象思想面向对象简介编程思想与编程语言无关。C语言、Go中的结构体就是后来面向对象编程语言中的类。面向对象编程:高内聚,低耦合。特性继承——匿名字段(实名字段)封装——方法多态——接口(interface)Go语言是典型的面向对象编程语言。通过程序描述对象创建类(指定类属性)类属性:静
技术小男生 技术小男生
4个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
光头强的博客 光头强的博客
4个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
1年前
java 复制Map对象(深拷贝与浅拷贝)
java复制Map对象(深拷贝与浅拷贝)CreationTime2018年6月4日10点00分Author:Marydon1.深拷贝与浅拷贝  浅拷贝:只复制对象的引用,两个引用仍然指向同一个对象
Wesley13 Wesley13
1年前
java类的属性
java类是一个面向对象的思想!!!!!!!!!!!!首先我们来创建一个Student类packagecuteSnow;publicclassStudent{//学生类型的属性,所有创建的学生对象都有以下的属性publicStringid;//学号publ
Wesley13 Wesley13
1年前
java常用类(2)
三、时间处理相关类Date类:计算机世界把1970年1月1号定为基准时间,每个度量单位是毫秒(1秒的千分之一),用long类型的变量表示时间。Date分配Date对象并初始化对象,以表示自从标准基准时间(称为“历元”(epoch),即1970年1月1日08:00:00GMT)以来的指定毫秒数。示例:packagecn.tanjian
Wesley13 Wesley13
1年前
JAVA 基础知识
JAVA纯面向对象语言,有平台无关性,一次编译到处运行,编辑器会把java代码变成中间代码,然后在JVM上解释执行。拥有很多内置的类库,提供了对Web应用开发的支持,具有较好的安全和健壮性。JAVA和C的异同都是面向对象语言使用了面向对象的思想(封装,继承,多态),面向对象的特性(继承和组合)  面向对象有以下特点:  (1
Wesley13 Wesley13
1年前
Java学习笔记之面向对象、static关键字
一周Java学习总结今天就总结理清一下关于面向对象和面向过程的程序设计的一些不同特点,以及讲下static关键字。面向对象现在接触的Java是面向对象的,现在的程序开发几乎都是以面向对象为基础的。我现在不看书,光靠回忆去想这个特性的解释性语言,只能想到看书时很深刻的一句话,面向对象就是一个更加具体描述一个事
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
1年前
java面试考点解析(4):面向对象思想、系统架构设计
\ 一、面向对象思想 \1、面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:\抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象