java基础——封装

一.类和对象的创建

Java是一门纯粹面向对象的语言,而对于Java中“面向对象”的特点有三:封装、继承、多态。

在讲封装之前,要先说说类和对象的创建。

1.如何创建一个类

情景:请你写一个类,用来描述人的属性与行为。

(1)用class关键字声明一个类

public class Person//1-1

(2)定义属性与行为

属性通过定义变量来实现,行为通过创建方法(也就是函数)来实现。

一个人的属性有姓名、年龄、身高、职业....等等。

一个人的行为可以有吃饭、睡觉、走路......等等。

分析完了以后,就可以开始写代码了。

public class Person{//1-2 
String name; 
int age;
 float tall;
 public void eats(){ Ststem.out.println("人会吃食物"); } 
public void sleep(){ System.out.println("人需要睡觉 "); } }

这是一个最简单的类的创建。如果一个有C语言基础的人看上述代码,一定有一个疑问,main方法为啥不见了?

其实main方法本身也是一个方法,人的行为并没有这个,所以不用创建main方法。另一方面,我们现在写的代码只是在描述人,而并非实现。

而当我们写完类后,如果去运行代码,会发现只能通过编译,而无任何运行的结果。而若想让你写的代码运行起来,那就要写main方法,把这个类放到main方法中去实现。

那如何实现“把类放到main方法中去实现”这个动作呢?当然不是把代码复制粘贴过来,而是创建对象。

也有一种说法,把“创建对象”称作“创建实例”,其实这俩是一个东西,目的都是为了你让所写的类能够运行。

我们现在创建了一个描述人的类,那么创建对象时,就要去描述具体的人,比如小明。

为了和“Person”这个类区分,我们一般把带有main方法、里面需要通过其他类来创建对象的类叫“测试类”,起名规范为:父类名+Test

public class PersonTest{//1-3
 public static void main(String[] args){
 Person xiaoming=new Person(); } }

上述代码第三行即为创建对象的范式。

左边为:类名 对象名

右边为:new关键字 类的构造方法

所以创建对象的公式为:

类名+对象名=new+类的构造方法

对象如何操作成员变量?(即类中所定义的变量)

用对象名.变量名调用

比如 xiaoming.name="小明"; 就完成了对Person中的name变量赋值的操作。

如果你想检验是否赋值成功,可以在第三行下再写一行代码:

System.out.println(xiaoming.name);

打印出“小明”,就说明赋值成功了。

同理,操作成员方法(即类中的方法)就是: 对象名.方法名(参数列表);

例如:xiaoming.eats();

你就会在控制台看到“人会吃食物”这几个字样。

现在代码也可以正常跑了,难道这就完了吗?不,当然没有!

现在对于Person这个类,我们要开始思考一些东西。比如 像Person这种类的写法是否是通用的?这种写法有什么优点和劣点?我们能否改进这些缺点?

可以确定的是,这种写法是通用的,或者说面向对象的编程思想对世界上绝大部分的物质都适用。

但像1-2这种代码却并非是安全的,因为当你知道类名和变量名时,你就可以通过创建对象来改变这个变量的值。那么,我们如何改进这种缺陷,让它变得安全呢?

public class Person{//1-4
 private String name;
 private int age; 
private float tall; 
public void setName(String name){ this.name=name; }
 public String getName(){ return name; } 
public void setAge(int age){ this.age=age; } 
public int getAge(){ return age; } 
public void setTall(float tall){ this.tall=tall; }
 public float getName(){ return tall; } 
public void eats(){ Ststem.out.println("人会吃食物"); } 
public void sleep(){ System.out.println("人需要睡觉 "); } }

如你所见,我给这个代码添加了两个新的东西。一个是成员变量前的权限修饰符private,一个是get和set方法。

首先解释第一个东西,权限修饰符。Java当中的权限修饰符有puvlic、默认、public、protected。其中private访问权限是最小的,加了private的变量或方法,只能被此类中的成员直接访问,类外无法直接访问,这样就保证了数据的安全性。

那么,当我们想在类外改变成员变量时,就要用到每个变量的get和set方法了(构造方法也可以对变量赋初值,不过这里不详细说。)

比如name所配套的setName和getName方法,setName方法的作用是给变量赋初值,getName方法的作用就是返回这个值。所以在类外,我们就可以通过setName来改变name的值,(类名.setName(参数);),当你想使用name中的数据时,可以用 类名.getName(); 来调用。

对于get和set方法,有以下几点总结:

1.有些人说get和set方法起名这么规范,是否是自带的API?不是,他们仅仅是一种约定俗成的起名规范而已。

2.set方法一般用来对变量赋初值(即变量初始化),get方法返回你给变量赋的值,保证类外能够使用它。

3.作为公共方法,可以视情况写或不写,不用就不写。

好了,我们将代码改到了一个还可以的地步(因为当你学到后面,还会有更高明的写法)。接下来就要正式讲讲封装了。作为面向对象三大特性之一,封装的操作分为两步,第一步就是装,也就是把一个类相关的行为和属性装在一起,也就是将一个类相关的成员变量和成员方法写在这个类中。如代码1-2所演示。

第二步就是“封”,也就是我们所谓的提升安全性所添加的private修饰符和get、set方法。

这两步合起来,就叫封装。注意,缺了上述两步的任何一步,都不可叫封装。

封装的作用就是提升了数据的安全性,保护了数据的隐私。

封装之所以是是面向对象的第一大特性,就是因为封装改变了代码的结构,使得我们的编程思想从“面向过程”转变成了“面向对象”。也就是说,封装既是面向对象的前提,也是面向对象的一部分。

 

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值