Java面向对象(Ⅰ)

本文深入介绍了面向过程和面向对象的区别,强调面向对象的分类思想,并以Java为例讲解了类的定义、结构、创建及对象的使用。同时,阐述了局部变量、构造方法的概念,以及方法重载的重要性。通过实例帮助读者理解类与对象的关系,为学习面向对象编程打下基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本篇文章我们讲述的是面向对象,从面向对象的思想开始,然后学习面向对象解决问题的方式,通过方式我们再去具体了解怎样使用面向对象解决问题,对解决问题时出现的陌生的内容概念再进行详细讲述。

1.面向过程和面向对象

在说起面向对象之前,我们先复习一下大家所熟悉的面向过程吧。

1.1 面向过程(procedure oriented programming 缩写 POP)

面向过程顾名思义,注重的是解决问题的过程,分析出解决问题所需要的步骤,然后一步一步实现。举个例子吧,比如洗衣机洗衣服,用面向过程的思想来解决可以分为三个步骤:第一步打开洗衣机;第二步将衣服放进洗衣机;第三步关闭洗衣机,然后根据这三个步骤写代码实现,这就是面向过程。

1.2 面向对象(object oriented programming 缩写 OOP)

那么什么是面向对象呢?我们先看例子,以上面洗衣机洗衣服为例,面向对象来解决这个问题的方法是什么呢?
首先从问题出发,洗衣机洗衣服,我们可以分成两个类:洗衣机类和衣服类。然后分别在各个类中定义自己的内容,比如在洗衣机类中,可以定义属性(洗衣机的名字,容量等等),还可以定义行为(洗衣服,脱水等等),衣服类就可以定义衣服的类型,材质等等。然后我们再实现洗衣机洗衣服,直接创建洗衣机对象和衣服对象,调用所需的行为即可(这里的类和对象不理解没关系,我们后面会详细讲到)。分好类,不管什么时候,重要需要洗衣服,直接调用洗衣机类即可。
通过上面的例子,我们总结一下面向对象的思想。面向对象是以分类的方式进行思考和解决问题,先对整体关系作出分类,然后根据不同的类深入细节的处理,最后再来实现不同类中的行为。

1.3 面向过程和面向对象的关系

从上面两点对面向过程和面向对象的说明可以看出,面向对象解决问题更多样化,但即使这样,面向对象也不能完全取代面向过程,他们是相辅相成的。
面向对象更关注于从宏观上把握事物之间的关系。但是在具体到如何实现某个细节时。还是需要采用面向过程的思维方式。面向对象如果离开了面向过程,就无法实现真正的落地,成为无源之水。

2.Java类(class)

在上面讲述面向对象时,我们提到了分类,那么这里的“类”又是什么呢?

2.1 什么是类?

类是一个模板,它描述一类事物的属性和行为的集合。类是表示一个客观世界某类群体的一些基本特征抽象。这句话怎样理解呢?就比如上面提到的洗衣机类,在洗衣机类中定义属性行为等等,这就相当于一个模板,一个集合。我们可以根据这个模板去定义各种各样的洗衣机,类是抽象存在的概念。

2.2 类的结构

我们上面提到类中可以定义属性功能等等,那么类中具体都可以定义哪些内容呢?
●成员变量:事物属性的描述;
●成员方法: 事物的行为;(可以做的事情)
●构造方法:初始化对象;
●内部类: 即在类体中声明的类。
●块: 一段没有名称的代码块

2.3 如何定义一个类?

到这一步,我们已经认识了类,明白了类的概念和结构,那么我们该如何去定义一个类呢?
第一步:发现类。
我们可以从问题中,或者日常生活中看到,有一些物体,它们具有某些相同的属性,相同的功能。就比如在马路上,我们可以看到各种各样的汽车,这样就可以定义一个汽车类。

类的声明格式为:
[访问权限修饰符] [修饰符] class Car{
//修饰类的访问权限修饰符有两种:public和default(默认)
//修饰符有:abstract和final
//类名首字母大写,驼峰表示,见名知意
}

第二步:发现类的共有属性(成员变量)(名词)
比如汽车都有他们的颜色,名称,型号等,这些就可以作为汽车类的成员变量。成员变量是定义在类中,方法体之外的变量,它和Java变量一样,可以使用Java语言中任何一种基本数据类型和引用数据类型,可以进行初始化,若不进行初始化,会对它赋默认值。成员变量在创建对象的时候会从类中复制一份到对象中(对象接下来会详细讲述),成员变量可以被类中方法、构造方法和特定类的语句块访问。成员变量的作用范围为整个类体。

声明成员变量的格式为:
[访问权限修饰符] [修饰符] type attr_name [=defaultValue] ;
//声明成员变量
String name;
String color="黑色";

第三步:发现类的共有行为(成员方法)(动词)
成员方法和c语言中的函数是类似的。

方法声明格式为:
[访问权限修饰符] [修饰符]/ void start(){
System.out.println("汽车启动");
[return 返回值;]

2.4 类的总结

类是对同一类事物的定义,就相当于一个模板,在这个模板上,我们可以定义成员变量,成员方法,构造方法,内部类,块五个部分。类是抽象的概念,我们需要发现类,创造类,实现类。

//定义一个类,以汽车类为例,只提供一个简单类的写法
public class Car{
//成员变量
String name;
float price;
//成员方法
public void start(){
System.out.println("汽车启动");
}
//......
}

3.局部变量和构造方法

局部变量和构造方法也存在于类中。

3.1 局部变量

局部变量和成员变量都属于类中的变量,成员变量在2.3中已经讲到,那么什么是局部变量呢?局部变量是在方法、构造方法或者语句块中定义的变量,局部变量也可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。局部变量在使用前必须初始化赋值,局部变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。

public void speed(){
int weight=1000;//局部变量,存在于方法中,随着方法的运行而出现
System.out.println("汽车速度");
}

3.2 构造方法

构造方法和成员方法都属于类中的方法。不过作用不同,成员方法可以实现功能,而构造方法是用来给创建的对象初始化赋值的,分为无参构造方法和有参构造方法。在创建一个对象的时候,至少要调用一个构造方法。
每个类都有构造方法。如果没有显式地为类定义构造方法,Java将会为该类提供一个默认构造方法,但是只要在一个Java类中定义了一个构造方法后,默认的无参构造方法即失效。一个类可以有多个构造方法。

//构造方法名与类名相同,且没有返回值,且不需要使用void修饰。
//无参构造方法,系统会为没有显式构造方法的类提供的默认构造方法
public Car(){
}
//有参构造方法,如果类中定义了一个构造方法,默认的未显现的构造方法会失效,如果不想失效,就必须在类中,将默认构造方法显现出来
public CarString name){
this.name=name;//this关键字代表当前对象,后面会详细讲到
}

既然构造方法的作用是给创建的对象初始化赋值,那如何赋值呢?

//无参构造方法赋值,赋的是各种数据类型的默认值
Car x1=new Car();//name="null",price=0.0
//有参构造方法
Car x2=new Car"宝马",100000.0f;

4.Java对象

上面讲到,类是抽象的,是一个模板,在使用时,是不能直接使用模板的,那我们应该如何实现类呢?这时我们需要创建一个该类的对象,来调用类中的成员变量和成员方法等等。

4.1 什么是对象?

对象是类的一个实例,是以类为模板在内存中创建的实际存在的实例。
比如讲述类时,我们定义了一个汽车类,这时汽车类就相当于用来生产汽车的设计图纸,对象就相当于根据这个图纸生产出来的汽车。这个汽车拥有汽车类中定义的功能,是可以被使用的。

4.2 如何创建和使用对象?

对象的创建(实例化对象):

//类名   变量名  =   new  该类构造方法;
//比如创建一个汽车对象
Car x1=new Car();
//Car x1:使用Car类作为类型声明一个变量x1. 
//new Car():使用new + Car类构造方法创建对象. 
//= :将右边创建的对象地址 赋给 左边的x1变量

对象的使用:
使用x1变量来访问对象中的成员变量和成员方法。

//访问成员变量
System.out.println(x1.name);
//访问成员方法
x1.start();

● 同一类的每个对象有不同的成员变量存储空间。
● 同一类的每个对象共享该类的方法。

4.3 对象的总结

类是一类事物的抽象概念,是一个模型,而对象是由这个模型所创造的一个个具体存在的,实实在在存在的实例。
现实生活中先有对象后有类,而编程时先设计类后创建对象。

5.方法重载

通过学习类,我们知道,在类中可以定义多个方法,如果在同一个类中,出现名字相同,但参数不同(参数数量不同,参数类型不同,参数顺序不同)的多个方法,这种现象叫做方法重载,方法重载是跟方法的返回值类型没有关系的。
在创建对象调用这些方法时,可根据参数的不同来进行区分。

public void start(int a){
//......
}
public void start(int a,int b){//参数数目不同
//......
}
public void start(int a,String b){//参数类型不同
//......
}
public void start(String a,int b){//参数顺序不同
//......
}
public int start(String a,int b){//编译会报错,因为与返回值无关,该方法与上面的方法时一样的
//......
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值