java的世界是对象(面向对象)

本文介绍了面向对象编程的基本概念,如对象、类的定义,以及其在程序设计中的优势(易维护、易复用、易扩展)。通过类和对象的关系、封装、继承和多态的实例,解释了如何运用面向对象的方法,提升编程效率和代码组织性。
摘要由CSDN通过智能技术生成

什么是面向对象?

把数据和对数据的操作方法放在一起,作为一个相互依存的整体——对象。就是想女娲造人一样,塑造你时有手有脚,有头有脸,什么样的性格,会做什么,给你命运安排等等,就形成你这个人,这就是一个对象,就是一个存在的具体的实体。

而类,就是同类对象抽象出的共性。人,为了好了解一个对象,就抽象这些人的性格出来,给这些人做定义、标签,就是一个抽象的特征,比如:这些人是会做饭的。

当然,类和对象是互相的,类中可以有很多个对象,对象也可以有很多“性格”即类。

总体上,面向对象的程序是由对象组成的。

eg:看过《工作细胞》的小伙伴一个知道,我们身体的健康是由很多小细胞努力工作支持的,我们就有很多对象在工作如白细胞、红细胞等,取名就明白了是因为某些共性才取这个名的,也就是说红细胞是个对象(实体),也可以是很多个对象的类(特征)。当然,总体上是由这些对象努力工作实现了我们。

从别的小伙伴找到的,面向对象更适合解决规模更大的问题,举个例子:
要想实现一个简单的web浏览器可能需要大约2000个过程,这些过程需要对一组全局操作进行操作,采用面向对象的思想,可能大约只需要100个类,每个类平均包含20个方法。后者更易于程序员掌握,也容易找到bug。

为什么要面向对象?

网络上很多伙伴都是说面向对象的一些好处,即易维护、易复用、易扩展等,我其实是觉得真的很难理解,现在不从代码层面去理解,我们从生活中理解,由于在人的世界里,我们都是喜欢这么去了解一个人或一群人的——首先知道这个人是谁(具体),然后跟他相处之后了解他的性格是什么(特征),这是我们人类的思想,而代码是基于我们人开发的,固然要让我们好理解。

代码层面我们就希望按我们人类去发展,开发出一个对象,就是以后一个具体的人,然后为了开发很多的对象,我们基于这些对象将会有什么功能分类好然后去编写定义很多的类,最后创建对象的时候,就可以选择这个对象需要的类最后就可以创建出来了。

比如女娲造人,按面向过程一个一个造人(生成对象)太累了,就抽象这些人会有什么性格特征去先分类先,身高大于还是小于180、会不会做饭、温柔不温柔、好不好色等,定义好这些类之后,在创建对象就容易了——选择身高小于180、会做饭、温柔、好色等,生成,好了就创建好一个人了,这样女娲造人的效率可大大提升了。

因此,面向对象的功能好处就很好理解了——

易维护和易复用,一个对象生成之后,只要你给它生存空间,一般就会一直存在那里的了,就像人一样,不可能就是用一下就直接成垃圾了吧,因此也可以易复用了。

易扩展,就像一个人,是可以具有很大潜力的,人不可估量,三日不见当如刮目相看,他的功能还是可以继续拓展的,因此就易扩展了。

在了解对象与类之后,还得了解一个类是由什么组成的——是由变量(字段)与方法组成的。

类,就是对象的特征功能的一个定义,即比如会不会做饭,那怎么形容这个功能呢?会做饭的人是怎么样的呢?做饭是哪个菜系的,什么口味的,是不是靓女,会不会穿黑丝炒饭等等,菜系、口味、是否靓女、是否穿黑丝炒饭等就是变量(字段),方法就像是会做一个动作,比如靓女今天穿黑丝炒蛋炒饭,是粤菜风味的。因此定义一个类,就是定义类名、编写类的成员变量、编写类的成员方法。

面向对象怎么用?产生什么性质?

首先在创建对象之前,肯定要先认识一下这个对象,把它们的共性都提取出来,

第一,根据每一个共性我们开始编写类,将每一个功能封装起来,这个时候其实每一个类都是一个对象,是可以直接使用的,比如说有些人一生就是只会做计算机的。这样我们想要造一个对象的时候,就可以直接引用这些类合成这个对象,这个也是一个对象。这个就是封装。对于封装就是我们看到这个类就知道这个类是一个什么样的人了,就不需要把这个类内心挖出来看看是黑的还是红的,即封装的数据隐藏。

第二,按我们人类的思想,人是可以继承自己父母亲的所有东西的除了父母自己很私密的东西。因此,我们对象也是一样,可以让这个对象成为另一个对象的子类,另一个对象就是父类,那么子类可以继承父类的所有功能,除了父类自己的小九九,即private不可以继承。当然子类如果在父类的功能上改造了的话当然就是子类的功能覆盖了,这个就是覆盖(重写)。

第三,在我们的世界里,其实也是经常遇到重名的情况或者同一个形容词又是不一样的,这种情况是很忌讳的,我们也不喜欢摇摆不定的情况,何况计算机。面向对象的多态主要是继承的多态和方法的多态。

方法的多态很好理解,就是当我们找同一个名字的对象的时候,因为我们肯定是想着找哪个样子性格特征的对象的(如虽然都是找李四,但是一个聪明一个sb,我们要sb的那个欺负一下),因此计算机也是一样,多个方法有相同的名字,不同的参数,因为参数的不一样,计算机可以根据情况挑选,这个就是面向对象的重载。

继承的多态,也是很好理解,就是像一个父亲,虽然这个东西自己也有,但是还是想拿儿子的东西用,肯定就是按着父亲的思想去使用这个东西了。在面向对象里,就是父子类都有这个方法,父类拿了子类的东西用,如果没有改数据,就按照子类的情况生成,如果父类使用了并改了数据,那么就按父类的情况操作。

借鉴一个例子:

public class Vehicle {
    public void soundA() {
        System.out.println("We are not sure·····");
        soundB();
    }
    public void soundB() {
        System.out.println("We are not sure");
    }
}

public class Motorbike extends Vehicle {//(继承)
//子类重写父类方法
    public void soundA(String a) {
        System.out.println("The sound of a "+a);
    }
    public void soundB() {
        System.out.println("boom!!!");
    }
}

public class Tricycle extends Vehicle{//(继承)
//子类重写父类方法
    public void soundA(String a) {
        System.out.println("The sound of a "+a);
    }
    public void soundB() {
        System.out.println("ta ta ta·····");
    }
}

public class Plane extends Vehicle{//(继承)
//子类重写父类方法
    public void soundA(String a) {
        System.out.println("The sound of a "+a);
    }
    public void soundB() {
        System.out.println("It's really noisy······");
    }
}

public class TestEvent {
    public static void main(String args[]) {
    //将子类的引用赋给父类的对象(向上转型)
        Vehicle p = new Motorbike();
        Vehicle s = new Plane();
        Vehicle m = new Tricycle();
        p.soundA();
        s.soundA();
        m.soundA();
    }
}

运行如下:

We are not sure·····
boom!!!
We are not sure·····
It's really noisy······
We are not sure·····
ta ta ta·····

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值