JAVA面向对象(概念,类与对象,封装)

理解什么是面向对象之前先理解一下什么是面向过程。

 

面向过程

 

过程就是一件事情的先后经过;从什么开始到什么介绍,有一个时间上的先后顺序。

程序过程就体现在代码执行的先后顺序。

面向过程,就是一种解决问题的思路。用这种思想解决问题时,我们关心的是一件事情的先后经过,现经过什么,后再做什么。

在面向过程的编程中,将一个问题划分成多个子功能组成,最后依次调用。用这种编程思想编程时,流程清晰,程序结构简单。

 

面向对象

 

对象,简单理解就是一个实际存在的一个个体。此对象非彼"对象"。

生活中的对象,就比如你面前的电脑,你手中的手机,反正你能直观感触到的,都是一个对象。

Java程序中的对象,指的是通过new关键字在 堆内存 中开辟的一块空间。

面向对象又该怎么理解呢?面向对象也是一种解决问题的思路,用这种思路解决问题时,我们关心的是问题的参与者。比如,你要去打印文档,而你又没有设备,你找到打印文档的店家,店家会把需要打印的文档打印好给你,我们不用管是怎么样的打印过程。这种思想编程时我们不需要问题是怎样得到解决的。

在实际面向过程的编程中,开发者一般更多的时候是在调用别人写好的类的功能,这种情况下,开发者更多的是功能的调用和指挥者。

 

面向过程和面向对象的举例:

       吃午饭:

              面向过程:

                     1.  买菜,洗菜

                     2.  做饭

                     3.  吃饭

                     4.  收拾

              面向对象:

                     1.  找家饭馆

                     2.  点菜

                     3.  吃饭

                     4.  结账

 

由此可以看出面向对象和面向过程的区别:

  1. 关注点不同
    1. 面向过程:事件中的每一步功能怎么做。
    2. 面向对象:事件中的每一步功能有没有对象已经实现了,如果有直接调用。
  2. 编程效率不同
    1. 面向过程:每一步的更能都要自己实现,效率比较慢。
    2. 面向对象:大多使用的都是封装好的方法,可以直接使用,效率比较高。
  3. 使用范围不同
    1. 面向过程:适合解决需求简单的问题。
    2. 面向对象:更适合解决复杂的需求。

 

两者的关系:面向对象是基于面向过程的。

 

面向过程的程序设计有三种特性:封装性、继承性、多态性。

封装性:

       封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节,这就是封装思想。例如,用户使用电脑,只需要使用手指敲键盘就可以了,无须知道电脑内部是如何工作的,即使用户可能碰巧知道电脑的工作原理,但在使用时,并不完全依赖电脑工作原理这些细节。

继承性:

       继承性主要描述的是类与类之间的关系,通过继承,可以在无须重新编写原有类的情况下,对原有类的功能进行扩展。例如,有一个飞机的类,该类中描述了飞机的普通特性和功能,而战斗机的类中不仅应该包含飞机的特性和功能,还应该增加战斗机特有的功能,这时,可以让战斗机类继承飞机类,在战斗机类中单独添加战斗机特性的方法就可以了。

继承不仅增强了代码复用性,提高了开发效率,而且为程序的修改补充提供了便利。

多态性:

       多态性指的是在程序中允许出现重名现象,它指在一个类中定义的属性和方法被其他类继承后,它们可以具有不同的数据类型或表现出不同的行为,这使得同一个属性和方法在不同的类中具有不同的语义。例如,当听到"Cut"这个单词时,理发师的行为是剪发,演员的行为是停止表演,不同的对象,所表现的行为是不一样的。
 

 

类与对象

面向对象的编程思想力图在程序中对事物的描述与该事物在现实中的形态保持一致。为了做到这一点,面向对象的思想中提出两个概念,即类与对象。

类是对某一类食物的抽象描述,对象则是用来表示现实中该类事物的个体。

类与对象的关系:

类是对象的模板,对象是类的实例。

 

类:

类是对象的抽象,用于描述一组对象的共同特征和行为。类中可以定义成员变量和成员方法,其中成员变量用于描述对象的特征,也被称为属性。成员方法用于描述对象的行为,可简称为方法。

注意:只有定义在类中的变量才是成员变量,定义在成员方法中的变量是局部变量。

//定义一个类,Person是类名
class Person {
    // //定义String变量 name,用来保存姓名
    String name;
    // 定义int变量 age,用来保存年龄
    int age;

    // 定义speak()方法
    void speak() {
	int age = 18;//定义局部int变量age并赋值18
    //下面这条语句输出打印的age值是18,不论成员变量age的值是多少
	System.out.println("永远年轻,永远" + age + "岁");
    }
}

对象的创建与使用

在Java程序中,可以使用new关键字来创建对象。具体格式如下:

类名  对象名称  =  new  类名();

对象创建后,可以通过对对象的引用来访问对象的所有成员。

对象名.对象成员
//定义一个类,Person是类名
class Person {
    // //定义String变量 name,用来保存姓名
    String name;
    // 定义int变量 age,用来保存年龄
    int age;

    // 定义speak()方法
    void speak() {
	System.out.println("我的名字是:" + name + ", 我今年:" + age + "岁。");
    }

}

public class Demo {
    public static void main(String[] args) {
	Person p1 = new Person();

	p1.name = "旺财";
	p1.age = 3;
	p1.speak();

	p1.name = "小华";
	p1.age = -5;
	p1.speak();

    }
}

运行结果:

运行结果

在设计该类的时候,为了解决外界的随意访问问题,要对该类的成员变量的访问做出一些限定。这就需要类的封装。

所谓的封装,就是指定义一个类的时候,要将类中的属性私有化,即使用private关键字修饰,私有属性只能在它所在的类中才能被访问。为了让外界能够访问到私有属性,需要提供一些使用public关键字修饰的方法,其中包括获得属性值的getXxx()方法和设置属性值的setXxx()方法。
 

//定义一个类,Person是类名
class Person {
    // 定义私有String变量 name,用来保存姓名
    private String name;
    // 定义私有int变量 age,用来保存年龄
    private int age;

    // 获取name属性值
    public String getName() {
	return name;
    }

    // 设置name属性值
    public void setName(String s) {
	name = s;
    }

    public int getAge() {
	return age;
    }

    public void setAge(int a) {
	if (a > 0) {
	    age = a;
	}
    }
}

public class Demo {
    public static void main(String[] args) {
	Person p1 = new Person();
	p1.setName("旺财");
	p1.setAge(3);
	System.out.println("我的名字是:" + p1.getName() + "我今年:" + p1.getAge() + "岁。");
	p1.setAge(-5);
	System.out.println("我的名字是:" + p1.getName() + "我今年:" + p1.getAge() + "岁。");
	// 使用下面语句将会报错
	// p1.name;
    }
}

运行结果:

运行结果

结果分析:

在Person类中,使用private关键字将属性name和age声明为私有,对外界提供了几个公有的方法,其中getName()方法用于获取name属性的值,setName()方法用于设置name属性的值。同理,getAge()和setAge()方法分别用于获取和设置age属性的值。在main()方法中创建Person对象,设置名字年龄后打印,再次调用setAge()方法传入-5,在setAge()方法中对参数a的值进行检查,由于当前传人的值小于0,age属性没有被赋值,所以仍然为3。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漠诽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值