面向对象


前言

恰好你需求,恰好我专业
内容仅供参考


一、面向对象的思想

在说面向对象的思想前,我们先说说面向过程。那么什么是面向过程呢?其实面向过程 我们早就接触过了,在学 c#的时候你要完成某个功能是不是要在 script 标签里写方法,然 后在 body 标签调用,最后通过浏览器输出呈现给使用者看,而这就是面向过程。 例子: 面向过程:就是面向每一个步骤,每一个动作,就比如人的一天:早晨我起床,我漱口, 我洗脸,我吃早餐,我上课,我放学,我吃晚饭,我睡觉。是不是我要完成这一系列事情都 要完成一系列的专属动作,而我个人是要面对这整个过程,这就是以第一人称的面对过程。 面向对象:面向对象:面向对象是面向过程的一种“进化”,区别在于从面向过程的第 一人称转为面向对象的第三人称。就比如面向过程的例子人的一天。如果这个第一人称的人 不是“我”而是第三人称的小明(或他)。那么我是让小明每天完成这些事件的命令者(或 指挥者),那小明是什么?小明是我这些命令的服从者也就是我指挥的对象。 再举一个例子:现在智能手机都配置比较高级的 AI。比如小米手机。我要打开微信, 找到 xxx 给他发一条“你快还我钱”的信息。而要完成这些是不是我有一系列的动作。这 就是面向过程。还有另一种方式:小爱同学,打开微信,给 xxx 发一条快还我钱的信息。这 个过程就是面向对象。对象是谁?对象是小爱同学。 总结:打开微信、寻找 xxx、发信息,由我(第一人称)自己完成是我面向的一个过程。 打开微信、寻找 xxx、发信息,呼唤小爱同学(第三人称)完成是我面向(小爱 同学)对象,由对象帮我完成。
面向对象的特征:封装、继承、多态。

二、类和对象的关系:

类:对生活中事物的描述,
对象:这类事物实实存在的个体。
属性对应类的变量;行为对应类的方法;定义类就是描述事物,就是定义变量和方法(函
数)。所以有句话叫:万物皆对象。这是一种境界。

那对象是怎么来的呢?

首先我们要建立一个类,在这里我建立一个“man”(人)的类
Public class man{ }//这就是一个简单的类了
那么这个类可以创建对象吗?严格意义上来说是不可以创建的,因为创建它没意义,为
什么?因为这个类没有创建对象后可调用的方法。

代码如下(示例):

Public class man{
 //描述人的属性,成员变量
 String name; //人的姓名
 String mansix; //性别
 Int hights; //身高
 Int weight; //体重

 //描述人的行为。成员方法
 public void gg(){
 System.out.println("啊,又出错了");
};

public void gg1(String name){
 System.out.println(name+"啊,又出错了");
 };
}

类我们创建好了,接下来我们创建类的对象 :

new man(); //创建一个“人”的对象
man mans1=new man();//创建一个人的对象,通过“人”这一类型创建一个类类型
mans1。类类型变量指向对象。
mans1.manheight=173;//给类成员变量赋值

调用成员方法
 System.out.println(mans1.manheight);
 mans1.gg1("明明");
 mans1.manintroduce(); 

打印为:
在这里插入图片描述

匿名对象:

new man().manheight=165;//匿名对象,没有变量名,并直接给类成员变量赋值
	  new man().manname="啸战";//匿名对象,没有变量名,并直接给类成员变量赋值
new man().gg2();//在这里输出的为0,小明。
 

是不是有很多问好?结果为什么是这样的,我不是赋值了吗?为什么还是输出不出我赋的值呢?
关键是在new man()上面,你每new man()一个就是创建一个新的对象,所以你赋的值都在不同的对象的属性上。
小结:匿名对象你每创建一个匿名对象,它都是一个新的对象在堆内存的储存值是不一样的,而最后输出的又是一个新的对象
这就好像你打开了学生的资料档案,你打开小明的资料档案修改了小明的身高,又打开小红的档案修改了民族,最后打开小磊的档案看看资料有没有修改是同一个道理
所以输出的是类成员变量的默认值(或类中已赋值的值)及成员方法。
所以匿名对象并不适合于类成员变量的输出。如果是要输出一次类成员方法 ,那么就用匿名对象,因为这样更简洁

匿名对象当作参数传递:

创建一个方法(函数)
   public static void hh(man pp){
	   pp.manheight=152;
	   pp.manname="IQ";
	   pp.gg2();
	   
   };
调用方法
man qq=new man();
	  hh(qq);
      hh(new man());

可以将匿名对象作为实际参数进行传递
大家可以这么理解,我创建了一个方法,名为hh,而方法的参数是man类变量名为pp。
我在main函数中创建了一个对象,对象名为qq而hh(qq)可以理解为qq=pp
而qq=new man,所以hh(new man())也成立

创建对象后计算机做的内容:
在这里插入图片描述
你在创建一个对象后计算机会在堆内存中给man类成员变量一个地址值储存在其中,而在栈内存中会储存类类型变量也就是你创建对象时给对象起的名字,堆内存中的地址值会赋给栈内存中的对象名(变量),(其实可以这么理解:如果堆内存中的地址值不赋给栈内存中的对象名变量,那么对象名怎么调用类里的成员变量,和成员方法呢?)
总结:你每创建一个对象,计算机就会在堆内存中出现一个地址值,地址值的不同输出的内容就不同。就好比人类,我、小明、小张是不是都属于人这个类,而我、小明、小张就是对象,我们是不是都有人所具备的属性(姓名、性别、年龄、体重、身高……)但我们的属性值是不是不一样,我年龄21小明年龄20、小张年龄19。
而类里该有的功能对象是不是可以调用。就比如类里有睡觉和吃饭两个功能,是不是作为对象的我可以调用。到了中午我可以调用吃饭的功能吃饭。到了晚上调用睡觉的功能睡觉。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值