面向对象基础知识
还没有对象吧?我给你new一个呗!
好了,不开玩笑了,此对象非彼对象。
跟着我的步伐RushB~
1. 面向过程与面向对象
- 面向过程=蛋炒饭
- 面向对象=蛋盖饭
为什么会出现面向对象分析方法?
因为现实世界太复杂多变,面向过程的分析方法无法满足。
●面向过程
采用面向过程必须了解整个过程,每个步骤都有因果关系,每个因果关系都构成了一个步骤,多个步骤就构成了一个系统,因为存在因果关系每个步骤很难分离,非常紧密,当任何一步骤出现问题,将会影响到所有的系统。
如:采用面向过程生产电脑,那么他不会分CPU、主板和硬盘,它会按照电脑的工作流程一次成型。
●面向对象
面向对象对会将现实世界分割成不同的单元(对象),实现各个对象,如果完成某个功能,只需要将各个对象协作起来就可以实现。
假设你是一名服务员,一位奇葩的客人跟你说:“我想吃鸡蛋和饭”。
●动作一:你给客人端了一份蛋炒饭,但这名奇葩的客人不太满意
,提出新的要求:“我突然不想吃蛋,想吃牛排和饭”。这时,
你不得不去重新做一份牛排饭。然而面向过程就像这份蛋炒饭
,蛋和饭很难分离。
● 动作二:你给客人端了一份蛋盖饭,但这名奇葩的客人不太满意,
提出新的要求:“我突然不想吃蛋,想吃牛排和饭”。这时,你只要
将蛋分离,去掉,换成牛排。把面向对象看作蛋盖饭,只要将不
需要的鸡蛋换成需要的牛排即可重新上桌。
2.面向对象的三大特征
概念
封装
在java中,我们对类的封装,对方法的封装,在其他类中只需要调用这个类或者方法就行。
通俗点理解,我们在看电视的时候。电视机对里面的零件构造进行了封装,只要提供给我们一个遥控器,我们只需要用按遥控器操控就行。
继承
在java中,我们是在父子类之间定义继承关系的。只要子类继承父类,就可以调用父类中的方法(注:父类私有的方法子类无法调用)。
通俗点理解,你继承了“马云爸爸”的财产,变成了“负”二代。(注:父亲私有的东西不能用),就像脑子里的知识,不是继承来的,是靠自己一点一点学来的。
多态
编译时多态:函数的重载,构造方法之间
运行时多态:函数的重写,父子类之间(向上造型-基于继承)
建议去查一下多态的概念,阐述自己对多态的理解,这种基本概念有时经常能问倒人。
作 用
封装
●提高了代码的复用性
●提高了代码的安全性
继承
●提高了代码的复用性
●提高了代码的安全性
多态
●提高了代码的灵活性
●提高了代码的耦合性(配合反射)
3.类与对象的概念
类是人对具有共同性事物的抽象描述,是概念上的一个定义,如何发现类呢?
通常根据名词(概念)来发现,我们假设把朋友当成一个类,如“朋友类”中:名字、性别、身高、爱好。。。。。。
姓名—蔡徐坤
性别—男
身高—184
爱好—唱跳、rap、篮球
以上“蔡徐坤”、“男”、“184”和“唱跳、rap、篮球”他们是具体存在的,称为对 象,也叫实例。所以你就有了一个对象叫蔡徐坤,而且这个对象是真实存在的。
也就是说一个类的具体化(实例化),就是对象或实例。
为甚面向对象成为了主流技术,主要就是因为更符合人的思维模式,更容易分析现实世界,所以在程序设计中也采用了面向对象的技术,从软件的开发的生命周期来看,基于面向对象可以分为三个阶段:
●OOA(面向对象的分析)
●OOD(面向对象的设计)
●OOP(面向对象的编程)
Java就是一个纯面向对象的语言
4.类的定义
具体格式
类的修饰符 class 类名 extends 父对象名称 implements 接口名{
类体:属性和方法组成
}
ps:父类和接口此篇暂不介绍
代代代代码码码如下下下下:
/**
* 朋友类
*/
public class Friend {
//姓名
String name;
//性别
boolean sex;
//身高
int height;
//爱好
String hobby;
}
以上属性称为成员变量(实例变量),局部变量是在方法中定义的变量、方法的参数、方法的返回值,局部变量使用前必须初始化,而成员变量会默认初始化,初始化的值为该类型的默认值。
可以参考以下内容:
实例变量类型 | 默认值 |
---|---|
Byet.short.long.int | 0 |
char | ‘\u0000’ |
float.double | 0.0 |
boolean | false |
引用类型 | null |
5.对象的创建和使用
重头戏来了,我要给你们new一个对象了!!!
对象必须使用new创建出来,才能使用。
代代代代码码码如下下下下:
public class Test {
public static void main(String[] args) {
/**
* 创建一个真·对象
* 在朋友类中实例化一个对象
* 把朋友变成对象~啧啧啧
*/
Friend duiXiang=new Friend();
/**
* 修改成员变量格式:引用.成员变量=XXX
* 实例化的duiXiang,就是引用,也就类似指针,存放着地址
* 通过地址间接操作成员变量
*/
//设置成员变量
//对象的名字
duiXiang.name="秦牛正威";
//对象的性别->true:女 false:男
duiXiang.sex=true;
//对象的身高
duiXiang.height=168;
//对象的爱好
duiXiang.hobby="唱歌:就当是一场梦,醒了很久还是很感动~";
//给大伙介绍介绍-打印对象信息
System.out.println("我的对象是一位叫"+duiXiang.name
+"的"+(duiXiang.sex?"女":"男")+"孩");
System.out.print("她身高"+duiXiang.height);
System.out.print(",爱好是"+duiXiang.hobby);
}
}
运行结果: