美文网首页IT技术篇
Java基础——面向对象(一)

Java基础——面向对象(一)

作者: 游戏原画设计 | 来源:发表于2019-01-04 10:56 被阅读2次

OOP: 面向对象编程

O 1-2年时间

O 2-4年时间

P 5年以上 架构师

AOP:面向切面编程

1.面向对象思想

面向对象其实还是基于面向过程的编程思想

2.面向对象和面向过程的区别

面向过程:需要具体的强调每一个功能步骤实现

面向对象:强调的是对象,然后由对象进行功能的实现

3.面向对象的思想特点

a.是一种更加符合我们思想的思想

b.可以将复杂的事变成简单化

c.我们从执行者变成了指挥者

买电脑:

面向过程:需要了解自己的需求-->了解电脑的配置-->去岗顶买电脑-->讨价还价-->买回电脑

面向对象:我需要买电脑-->找班长-->给钱-->班长买回来

洗衣服:

面向过程:先脱衣服-->找一个盆-->放点洗衣服-->加点水-->把衣服扔进去-->踩一踩-->清水洗一洗-->拧干-->晾起来

面向对象:先脱衣服-->打开全自动智能化滚筒洗衣机-->按一下-->拿出来-->

吃饭:

面向过程:去菜市场买菜-->摘菜-->洗菜-->切菜-->炒菜(调味)-->盛起来-->吃

面向对象:点外卖-->吃

家常事务,洗衣服和点外卖都不划算,所以赶紧找个对象

把大象装进冰箱需要几步?

面向过程:

动作有哪些?

a.打开冰箱门

b.装进大象

c.关闭冰箱门

public class Demo {

public static void main(String[] args) {

open();

in();

close();

}

public static void open() {

System.out.println("打开冰箱门");

}

public static void in() {

System.out.println("把班长塞进去");

}

public static void close() {

System.out.println("关闭冰箱门");

}

}

面向对象:

我们要怎么样才能写出符合面向对象的程序

a.有哪些类

b.每一个类里面有什么东西

c.类与类最直接的关系是什么

把大象关进冰箱需要几步进行分析(你们有时间可以去看下名词提取法,UML)

a.有哪些类?

大象

冰箱

测试类(启动类,Demo)

b.每个类有什么东西?

大象:

进去冰箱

冰箱:

开门

关门

Demo:

main方法

c.每个类之间最直接的关系

Demo使用冰箱类来调用大象进去

class 班长{

public static void in(){

System.out.println("把班长塞进去");

}

}

class 冰箱{

public static void open(){

System.out.println("打开冰箱门");

}

public static void close() {

System.out.println("关闭冰箱门");

}

}

class Demo{

//调用冰箱去开门

//把班长塞进去

//关闭冰箱门

}

面向对象的开发,设计,特征

面向对象开发?

其实就是不断的创建对象,使用对象,指挥对象干活

面向对象设计?

其实就是管理和维护对象之间的关系

面向对象的特点?

封装(encapsulation)

继承(inheritance)

多态(polymorphism)

面向对象编程:

怎么去描述一个人?

属性:

姓名:刘飞龙

性别:男

身高:189cm

长相:.....

行为:

培育人才

匡扶正义

敬老爱幼

怎么去描述一条狗?

属性:

姓名:旺财

性别:公

种类:土狗

体长:100cm

体重:30kg

功能:

汪汪汪

吃饭

睡觉

摇尾巴

面向对象的概念就是对现实事物中存在和不存在的事物的抽象体,通过这种抽象摆脱计算机的思维,用现实世界的人的

思维去开发和维护程序。

我们学习 编程语言,是为了模拟现实的事物,而我们学习编程语言的Java的最基本的单位是:类

所以,我们就应该讲分析好的现实世界的事物用类来进行体现

由此,我们就应该对比现实事物和类的对应关系:

事物: 类:

属性 成员变量

行为 成员方法

类:应该是一组相关的属性和行为的集合,是一个非常抽象的概念

对象:是该类的事物的具体表现形式,具体存在的一个个体

举例:

学生:类

班长:对象

类:人类

对象:教师

对象:开发工程师

4.匿名对象:就是没有名字的对象

匿名对象的应用场景:

A.调用方法,仅仅适合只调用一次的时候。

注意:如果是调用多次,不合适

那么,匿名对象有什么好处?

有,匿名对象使用完毕后就是垃圾,可以被垃圾回收器回收

b.匿名对象可以作为实际的参数进行传递

5.成员变量和局部变量的区别:

A.在类中的位置不同

成员变量: 类中方法外

局部变量: 方法内或者方法声明上

B.在内存中的位置不同

成员变量:堆内存

局部变量:栈内存

C.生命周期不同

成员变量:随着对象的存在而存在,随着对象的消失而消失

局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

D.初始化值不同

成员变量:有默认的初始化值

局部变量:没有默认的初始化值,必须先定义,赋值,才能使用。

注意:

局部变量和成员变量的名字一致时,在方法中使用的时候采用的是就近原则

6.private:

是一个权限修饰符

可以修饰成员变量和成员方法

被其修饰的话,就只能在本类中进行方法

7.定义一个学生类:

成员变量:name age

成员方法:show()

我们在使用这个案例的时候,发现了一个问题

通过这个对象进行 变量的赋值,可以赋值一些非法的数据。

这个是不合理的。

应该是这个样子,在赋值之前,我需要先对数据进行合法性的校验

判断到底放在哪里会比较合适。

StudentDemo只是一个测试类,测试类一般只用于创建对象和调用方法

所以,我们校验的数据应该放在Student类里面。

按照我们之前的分析,我们给出了一个方法进行校验

但是呢,有些人偏偏就不走你这个方法,还是进行直接的赋值。

但是呢,我们又不能要求开发者或者用户强制的去使用你的校验方法。

我们怎么能够要求用户必须要走正确的成员变量的赋值呢?

针对这样的情况,Java提供了一个关键:private

private:私有的,可以修饰成员变量和成员方法

被private修饰的变量和方法,只能够在本类中进行方法。

我们在开始的时候,就见过一个封装的思想。

封装:是指隐藏对象的属性和实现的细节,仅对外提供公共的访问方式

1.继承的注意事项:

A.子类只能继承父类的非私有的成员变量和成员方法

B.子类不能继承父类的构造方法,但是可以通过一个关键字去访问父类的构造方法:super(马上讲)

C.OOP的编程语言,所有的类都应该会有一个继承关系,如果没有继承关系就默认extends Object

D.千万不要了为了部分功能去实现继承

class 鸟{

public void 飞{

}

public void 下蛋{

}

public void 吃虫子{

}

}

class 企鹅{

public void 下蛋{

}

}

那么我们应该什么时候去考虑使用继承?

继承的实现应该体现一个"is a"的关系

人类

教师

学生

水果

苹果

香蕉

橘子

西瓜

采用一个假设:

如果有A/B两个类.只有他们符合A/B的其中一种,或者B/A的一种就可以考虑使用继承。

2.继承中成员变量的关系:

a.子类的成员变量和父类的成员变量的名字不一致时,太简单 不问

b.子类的成员变量和父类的成员变量的名字一致时,这个怎么玩?

在子类的方法中访问一个变量的顺序

a.在子类的局部范围内去查找。有就直接使用

b.在子类的成员范围内去查找,有就直接使用

c.去父类成员变量去查找,有就直接使用

d.如果还找不到,就去父类的父类。。 都没有就真的没有了 报错

3.问题:

我不仅仅要输出局部变量的num,还要输出本类成员范围内的num.怎么办?

我还想要输出父类的num,怎么办?

如果你有一个东西和this相似,但是可以直接访问父类的数据就好

恭喜你,java提供了一个关键字叫做supre;

this和super的区别

分别是什么?

this代表本类对于对象的应用

super代表父类的存储空间的标识(可以理解为父类的引用,可以操作父类的方法和变量)

怎么用?

a.调用成员变量

this.成员变量 调用的是当前对象的成员变量

super.成员变量 调用的是父类的成员变量

b.调用构造方法

this(..) 调用的是本对象的构造方法

super(..) 调用父类的构造方法

c.调用成员方法

this.成员方法 调用的是本对象的成员方法

super.成员方法 调用父类的成员方法

4.子类的创建的过程:

创建子类的对象是,会调用子类的构造器,而在调用子类的构造器之前,会先调用父类的构造器

先对父类做初始化,在对子类做初始化,因为子类需要使用到父类的东西,所以父类必须先初始。

继承中构造方法的关系:

a.子类中的所有的构造方法都会默认的执行父类的空参数构造

b.子类的每一个构造方法的第一条语句默认的就是super();

5.如果父类没有无参构造,那么子类的构造方法会出现什么样的情况?

报错。

如何解决?

a.在父类添加一个无参的构造器

b.通过super关键字去显式的调用父类的带参构造器

注意:

this(..)和super(..)必须出现在第一条语句上面

如果不是放在第一条语句,就可能对父类的数据进行

6.继承中成员方法的关系:

a.子类中的方法和父类中的方法名字不一致时,各自走各自的

b.子类中的方法和父类中方法声明的名字一致时

通过子类对象调用的顺序:

a.先在子类中,看有没有这个方法 如果有就直接使用、

b.在看父类有没有,有就直接使用。

c.如果都没有就报错

7.方法的重写(方法覆盖):子类中出现了和父类方法声明一模一样的方法

方法重载:

本类中的方法名一样,参数列表不同,与返回值无关

子类对象调用方法的时候;

先找子类,在找父类

方法重写的应用:

当你的子类需要使用父类的功能,而功能的主体子类有持有自己特有的内容的时候,可以重写父类中的方法。

这样就,不但沿用了父类的特有功能,还能直接定义子类的功能

王道之概述:子类要覆盖父类的方法是,直接把方法的定义拷贝过来,重新编写到父类

---------------------

Java。大家都知道,我们是学Java全栈的,大家就肯定以为我有全套的Java系统教程。没错,我是有Java全套系统教程,进扣裙【47】974【9726】所示,今天小编就免费送!~

“我们相信人人都可以成为一个程序员,现在开始,找个师兄,带你入门,学习的路上不再迷茫。这里是ja+va修真院,初学者转行到互联网行业的聚集地。"

相关文章

网友评论

    本文标题:Java基础——面向对象(一)

    本文链接:https://www.haomeiwen.com/subject/wurhrqtx.html