乐趣区

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

今日分享开始啦,请大家多多指教~

前言:

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;}
public void setKeys(String keys) {
// 警察,监听电话,// 用户只管调用 setKeys 办法,它并不知道这块代码
if(keys.equals("110") ) { // 判断 keys 值是否为 110
System.out.println("告诉警察");
}
this.keys = keys;
}
}

封装的益处

1)把不让外界晓得的信息就暗藏起来,内部无奈操作。代码比拟平安,内部无奈操作。

2)代码只能外部解决。当代码批改,所有调用中央都要随之扭转,这种构造紧耦合。如果代码只能外部批改,批改后,内部丝毫不影响,这种构造松耦合。程序能实现松耦合就松耦合。封装就实现松耦合构造。外部批改不影响其余代码。

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

继承

什么叫继承?

java 中继承和生存继承是一样一样的。父类(父亲)和子类(本人)。父亲父亲,子类子类。

java 继承单继承,c 语言容许多继承(c 语言代码品质出错,很难找的其中一个起因)。

论断: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。


通过对下面两个类的察看:

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

2)它们有共性,Tiger 类它有本人的 run() 办法,Eagle 类它有本人的 fly() 办法。

有共性有不同!

毛病:

共性的办法,呈现在多个类中,如果业务须要批改,要批改多处,工作量大,容易造成失误,这个类改,那个类

忘改,造成后果不统一!

继承

解决办法?就是继承!

1)要把共性办法抽取进去,放到一个独自类中 Animal

2)把共性办法就从以后类中删除

3)两个类连接起来,应用继承,Tiger extends Animal,能够在子类中间接拜访父类办法 eat()




抽象类



接口



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

为什么须要抽象类?

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

框架要做很多底层专用事件,让咱们写代码利用框架,程序更加强壮,更加平安,

业务需要公有事件,还得咱们去实现

专用框架实现,公有咱们本人实现,咱们本人写代码怎么和框架对接。框架进行规定!

标准公有类(形象办法申明)

为什么须要接口?

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

java JDBC 数据库一套标准,java 本身规定接口,其余厂商去实现

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

小结

今日给大家分享的是面向对象,这对于很多小白来说很敌对的,大家都能看得懂!

今日份分享已完结,请大家多多包涵和指导!

退出移动版