微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

06-03 Java 面向对象思想概述、开发设计特征,类和对象的定义使用,对象内存图

面向对象思想概述、开发设计特征

1面向过程:强调的是每<a href="https://www.jb51.cc/tag/yige/" target="_blank" class="keywords">一个</a><a href="https://www.jb51.cc/tag/gongneng/" target="_blank" class="keywords">功能</a>的步骤 面向对象:强调的是对象,然后由对象去<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a><a href="https://www.jb51.cc/tag/gongneng/" target="_blank" class="keywords">功能</a>

2<span style="color: #000000;">:面向对象的思想特点
A:是一种更符合我们思想习惯的思想
B:可以将复杂的事情简单化
C:将我们从执行者变成了指挥者

举例:
    买电脑:
        面向过程:我的了解电脑</span>--了解我自己的需求--找对应的参数信息--去中关村买电脑--讨价还价--<span style="color: #000000;"&gt;买回电脑
        面向对象:我知道我要买电脑 </span>-- 班长去给我买 --<span style="color: #000000;"&gt; 班长就买回来了
    洗衣服:
        面向过程:把衣服脱下</span>--找<a href="https://www.jb51.cc/tag/yige/" target="_blank" class="keywords">一个</a>盆--放点洗衣粉--加点水--把衣服扔进去--搓一搓--清洗衣服--拧干--<span style="color: #000000;"&gt;晾起来
        面向对象:把衣服脱下</span>--打开全<a href="https://www.jb51.cc/tag/zidong/" target="_blank" class="keywords">自动</a>洗衣机--扔进去--一键即可--<span style="color: #000000;"&gt;晾起来
    吃饭:
        面向过程:去超市买菜</span>--摘菜--洗菜--切菜--炒菜--盛起来--<span style="color: #000000;"&gt;吃
        面向对象:上饭店吃饭,你</span>--服务员(点菜)--厨师(做菜)--服务员(端菜)--<span style="color: #000000;"&gt;吃

        家常事物,买洗衣机和去饭店太不划算了,所以,找个对象。
        但是,你不跟我好好学习,你将来4000,你对象8000。

3<span style="color: #000000;">:把大象装进冰箱
面向过程:
动作有哪些呢?<span style="color: #000000;">
A:打开冰箱门
B:装进大象
C:关闭冰箱门

    <a href="https://www.jb51.cc/tag/daima/" target="_blank" class="keywords">代码</a>体现;
        </span><span style="color: #0000ff;"&gt;class</span><span style="color: #000000;"&gt; Demo {
            </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; main(String[] args) {
                </span><span style="color: #008000;"&gt;/*</span><span style="color: #008000;"&gt;
                Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println("打开冰箱门");
                //打开冰箱门的东西,我现在仅仅是为了演示,就写了<a href="https://www.jb51.cc/tag/yige/" target="_blank" class="keywords">一个</a><a href="https://www.jb51.cc/tag/shuchu/" target="_blank" class="keywords">输出</a>语句
                //其实,它可能需<a href="https://www.jb51.cc/tag/yaozuo/" target="_blank" class="keywords">要做</a>很多操作。
                //这个时候<a href="https://www.jb51.cc/tag/daima/" target="_blank" class="keywords">代码</a>就比较多一些了
                //假设我要多次打开冰箱门,
                //<a href="https://www.jb51.cc/tag/daima/" target="_blank" class="keywords">代码</a>一多,每次都写一遍,麻烦不
                //我们就应该用<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>改进

                Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println("装进大象");
                Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println("<a href="https://www.jb51.cc/tag/guanbi/" target="_blank" class="keywords">关闭</a>冰箱门");
                </span><span style="color: #008000;"&gt;*/</span>

                <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;写了<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>以后,<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>就改变了</span>

<span style="color: #000000;"> open();
in();
close();
}

            </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; <a href="https://www.jb51.cc/tag/open/" target="_blank" class="keywords">open()</a> {
                Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println(</span>"打开冰箱门"<span style="color: #000000;"&gt;);
            }

            </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; in() {
                Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println(</span>"装进大象"<span style="color: #000000;"&gt;);
            }

            </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; close() {
                Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println(</span>"<a href="https://www.jb51.cc/tag/guanbi/" target="_blank" class="keywords">关闭</a>冰箱门"<span style="color: #000000;"&gt;);
            }
        }

<span style="color: #ff0000;"&gt;面向对象:</span>
    <span style="color: #ff0000;"&gt;我们怎么才能更符合面向对象思想呢</span></span><span style="color: #ff0000;"&gt;?
        A:有哪些类呢?
        B:每个类有哪些东西呢?
        C:类与类直接的关系是什么呢?</span><span style="color: #000000;"&gt;

    把大象装进冰箱的分析</span>? (如何分析有哪些类呢?<span style="color: #000000;"&gt;UML。名词<a href="https://www.jb51.cc/tag/tiqu/" target="_blank" class="keywords">提取</a>法。)
        A:有哪些类呢</span>?<span style="color: #000000;"&gt;
            大象
            冰箱
            Demo
        B:每个类有哪些东西呢</span>?<span style="color: #000000;"&gt;
            大象:
                进去
            冰箱:
                开门
                关门
            Demo:
                main<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>
        C:类与类直接的关系是什么呢</span>?<span style="color: #000000;"&gt;
            Demo中使用大象和冰箱类的<a href="https://www.jb51.cc/tag/gongneng/" target="_blank" class="keywords">功能</a>。

    <span style="color: #ff0000;"&gt;<a href="https://www.jb51.cc/tag/daima/" target="_blank" class="keywords">代码</a>体现:
        </span></span><span style="color: #ff0000;"&gt;class 大象 {
            public static void in() {
                Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println("装进大象");
            }
        }

        class 冰箱 {
            public static void <a href="https://www.jb51.cc/tag/open/" target="_blank" class="keywords">open()</a> {
                Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println("打开冰箱门");
            }

            public static void close() {
                Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println("<a href="https://www.jb51.cc/tag/guanbi/" target="_blank" class="keywords">关闭</a>冰箱门");
            }
        }

        class Demo {
            public static void main(String[] args) {
                冰箱<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>开门
                大象<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>进去
                冰箱<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>关门
            }
        }

4<span style="color: #000000;">:开发,设计,特征
面向对象开发
就是不断的创建对象,使用对象,指挥对象做事情。

面向对象设计
其实就是在管理和维护对象之间的关系。

面向对象特征
封装(encapsulation)
继承(inheritance)
多态(polymorphism)

类和对象的概述

现实世界中是如何描述一个事物的呢?<a href="https://www.jb51.cc/tag/shuxing/" target="_blank" class="keywords">属性</a>:该事物的描述信息 行为:该事物能够做什么

我们学习编程语言,是为了模拟现实世界的事物的。
而我们学习的编程语言Java中最基本的单位是:类。
所以,我们就应该把事物通过类来体现出来:
由此,我们就得到了现实世界事物和类的对应关系:

<span style="color: #ff0000;">事物: 类:
属性 成员变量
行为 成员方法

<span style="color: #ff0000;">类:是一组相关的属性和行为的集合。是一个抽象的概念。
对象:是该类事物的具体表现形式。具体存在的个体。

举例:
学生:类
班长:对象

类的定义:学生类

属性 事物的信息描述 行为 事物的功能
类:
    成员变量    事物的<a href="https://www.jb51.cc/tag/shuxing/" target="_blank" class="keywords">属性</a>
    成员<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>    事物的行为

定义<a href="https://www.jb51.cc/tag/yige/" target="_blank" class="keywords">一个</a>类,其实就是定义该类的成员变量和成员<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>。

案例:我们来完成<a href="https://www.jb51.cc/tag/yige/" target="_blank" class="keywords">一个</a>学生类的定义。

学生事物:
    <a href="https://www.jb51.cc/tag/shuxing/" target="_blank" class="keywords">属性</a>:姓名,年龄,地址...
    行为:学习,吃饭,睡觉...

把事物要转换为对应的类:

学生类:
    成员变量:姓名,年龄,地址...
    成员<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>:学习,吃饭,睡觉...

<span style="color: #ff0000;"&gt;成员变量:和以前变量的定义是一样的格式,<strong>但是位置不同,在类中<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>外。</strong>
成员<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>:和以前的<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>定义是一样的格式,<strong>但是今天把static先去掉。</strong></span>

首先我们应该定义<a href="https://www.jb51.cc/tag/yige/" target="_blank" class="keywords">一个</a>类,然后完成类的成员。

<span style="color: #008000;">*/
<span style="color: #008000;">//<span style="color: #008000;">这是我的学生类
<span style="color: #0000ff;">class<span style="color: #000000;"> Student {
<span style="color: #008000;">//<span style="color: #008000;">定义变量
<span style="color: #008000;">//<span style="color: #008000;">姓名//<span style="color: #ff0000;">这里定义在类中方法

<span style="color: #000000;"> String name;
<span style="color: #008000;">//<span style="color: #008000;">年龄
<span style="color: #0000ff;">int<span style="color: #000000;"> age;
<span style="color: #008000;">//<span style="color: #008000;">地址
<span style="color: #000000;"> String address;

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;定义<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>
</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;学习的<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a><span style="color: #ff0000;"&gt;//这里没有static</span></span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; study() {
    Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println(</span>"学生爱学习"<span style="color: #000000;"&gt;);
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;吃饭的<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; eat() {
    Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println(</span>"学习饿了,要吃饭"<span style="color: #000000;"&gt;);
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;睡觉的<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; sleep() {
    Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println(</span>"学习累了,要睡觉"<span style="color: #000000;"&gt;);
}

}

类的使用:学生类

一个java文件中写两个类:一个基本的类,一个测试类。 注意:文件名称和测试类名称一致。
如何使用呢?
    创建对象使用。

如何创建对象呢?
    格式:类名 对象名 = new 类名();

如何使用成员变量呢?
    对象名.变量名
如何使用成员<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>呢?
    对象名.<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>名(...)

<span style="color: #008000;">*/
<span style="color: #008000;">//<span style="color: #008000;">这是学生类
<span style="color: #0000ff;">class<span style="color: #000000;"> Student {
<span style="color: #008000;">//<span style="color: #008000;">姓名
String name; <span style="color: #008000;">//<span style="color: #008000;">null
<span style="color: #008000;">//<span style="color: #008000;">年龄
<span style="color: #0000ff;">int age; <span style="color: #008000;">//<span style="color: #008000;">0
<span style="color: #008000;">//<span style="color: #008000;">地址
String address; <span style="color: #008000;">//<span style="color: #008000;">null

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;学习</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; study() {
    Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println(</span>"学生爱学习"<span style="color: #000000;"&gt;);
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;吃饭</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; eat() {
    Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println(</span>"学习饿了,要吃饭"<span style="color: #000000;"&gt;);
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;睡觉</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; sleep() {
    Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println(</span>"学习累了,要睡觉"<span style="color: #000000;"&gt;);
}

}

<span style="color: #008000;">//<span style="color: #008000;">这是学生测试类
<span style="color: #0000ff;">class<span style="color: #000000;"> StudentDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #ff0000;">//如何创建对象呢?
//类名 对象名 = new 类名();
Student s = <span style="color: #0000ff;">new<span style="color: #000000;"> Student();

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;<a href="https://www.jb51.cc/tag/shuchu/" target="_blank" class="keywords">输出</a>成员变量值
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println(s.name);
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println(s.age);
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println(s.address);
    </span><span style="color: #ff0000;"&gt;//如何使用成员变量呢?对象.变量名</span>
    Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println(s.name+"---"+s.age+"---"+<span style="color: #000000;"&gt;s.address);


    </span><span style="color: #ff0000;"&gt;//给成员变量赋值</span>
    s.name = "林青霞"<span style="color: #000000;"&gt;;
    s.age </span>= 27<span style="color: #000000;"&gt;;
    s.address </span>= "北京"<span style="color: #000000;"&gt;;
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;赋值后的<a href="https://www.jb51.cc/tag/shuchu/" target="_blank" class="keywords">输出</a></span>
    Sy<a href="https://www.jb51.cc/tag/stem/" target="_blank" class="keywords">stem</a>.out.println(s.name+"---"+s.age+"---"+<span style="color: #000000;"&gt;s.address);

    </span><span style="color: #ff0000;"&gt;//<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a><a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>。如何使用成员<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>呢?对象名.<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>名(...)</span>

<span style="color: #000000;"> s.study();
s.eat();
s.sleep();
}
}

一个对象的内存图:

两个对象的内存图

三个对象的内存图----  两个引用指向同一个堆内存

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐