java面向对象之封装

java封装

在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

对象的概念

要想使用面向对象(OOP),一定要搞清楚对象的三个主要特性:

  • 对象的行为——可以对对象施加哪些操作,或者对对象施加哪些方法?
  • 对象的状态——当施加那些方法时,对象如何相应?
  • 对象标识——如何辨别具有相同行为与状态的不同对象?

       对象的行为是指在类中我们定义的一些方法,而对象的状态则是类中定义的一些属性,每一个对象都是独立的个体,他们即使行为和状态完全一致,也是拥有不同的对象标识来代表他们本身,就像我们人一样,每个人都是独立的个体,都有自己的身份证来表明身份。

初识封装

      封装是将一些代码块(如方法和属性)封装成“对象”,这些“对象”可以类比为我们现实中的各个东西,比如一个人,就可以看成一个对象,那么这个人会有他的属性,比如说性别,年龄,名字等等,当然也会有他的一些行为,比如吃饭,睡觉,打游戏等等。而在java面向对象中,我们把class(类)比作人,代表类别,而对象比作具体的是哪个人,代表实例。

下面配合代码来理解一下:

public class Person {

    private String name;
    private String sex;
    private int age;

    void eat(){
        System.out.println("我去吃饭拉");
    }

    void sleep(){
        System.out.println("我去睡觉拉");
    }

    void playGame(){
        System.out.println("我去打游戏拉");
    }

    public static void main(String[] args) {
        Person p = new Person();
        p.name = "楷楷";
        p.sex = "男";
        p.age = 23;
        System.out.println(String.format("我叫%s,今年%d岁,性别%s",p.name,p.age,p.sex));
        p.eat();
        p.sleep();
        p.playGame();
    }
}

输出结果:

我叫楷楷,今年23岁,性别男
我去吃饭拉
我去睡觉拉
我去打游戏拉

在上面的代码,我们总共干了几件事:

  1. 创建了一个类叫做Person
  2. 在类中我们定义了三个属性和三个方法,分别是姓名、年龄、性别和吃饭、睡觉、打游戏
  3. 写上一个main方法,给程序执行开个入口
  4. 在main方法中,我们创建一个Person的实例对象,并且给这个对象的姓名、年龄、性别分别赋值,接着再进行输出
  5. 分别调用对象的三个方法,观察输出结果

怎么样,还好理解吧?我们可以控制每个实例去做什么事,或者获取这个实例的属性。

构造器

假如我们不希望每次都通过对象的属性一个一个的赋值,那么我们可以借助一个东西叫做构造器。

首先来了解一下构造器是什么?

构造器其实可以理解为一个特殊的方法,这个方法没有返回值,方法名称和类名完全一致,并且会在类被实例化的时候被自动调用,通常用来作为初始化一些属性使用。

构造器的分类

  • 无参构造器
  • 有参构造器

其实就是一个没参数,一个有参数拉

下面我们把刚才的代码改造一下,用构造器来给我们的对象进行初始化属性

public class Person {

    private String name;
    private String sex;
    private int age;

    public Person(){  // 无参构造器
        this.name = "楷楷";
        this.sex = "男";
        this.age = 23;
    }

    void eat(){
        System.out.println("我去吃饭拉");
    }

    void sleep(){
        System.out.println("我去睡觉拉");
    }

    void playGame(){
        System.out.println("我去打游戏拉");
    }

    public static void main(String[] args) {
        Person p = new Person();
        System.out.println(String.format("我叫%s,今年%d岁,性别%s",p.name,p.age,p.sex));
        p.eat();
        p.sleep();
        p.playGame();
    }
}

输出结果:

我叫楷楷,今年23岁,性别男
我去吃饭拉
我去睡觉拉
我去打游戏拉

很方便吧?这种是无参构造器的写法,我们会发现,每次创建的对象默认都给这个对象赋了属性,万一我这个对象不想叫楷楷怎么办呢?那么下面就是该有参数构造器登场;

public class Person {

    private String name;
    private String sex;
    private int age;

    public Person(String name,String sex,int age){  // 有参构造器
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    void eat(){
        System.out.println("我去吃饭拉");
    }

    void sleep(){
        System.out.println("我去睡觉拉");
    }

    void playGame(){
        System.out.println("我去打游戏拉");
    }

    public static void main(String[] args) {
        Person p = new Person("楷楷","男",23);
        System.out.println(String.format("我叫%s,今年%d岁,性别%s",p.name,p.age,p.sex));
        p.eat();
        p.sleep();
        p.playGame();
    }
}


输出结果:

我叫楷楷,今年23岁,性别男
我去吃饭拉
我去睡觉拉
我去打游戏拉

Getter和Setter方法

假如我现在,我不想用构造器赋值,也不想手动赋值,那么我们也可以定义一些属性的Getter和Setter方法来实现对属性的获取和设置。这种方法更符合我们OOP的原则,也是经常会被使用的一种方式。

这边教大家一个快捷生成Getter和Setter的方法,首先你要是编辑器IDEA,当然别的像eclipse的应该也可以,我们这边拿IDEA来举例:

1.在类中右键找到,Generate

2.点击选择Getter and  Setter

3.选中所有的属性,点击OK

 

4.getter和setter方法已自动生成代码如下

然后我们利用生成的方法就可以对应的给我们的属性设置值拉:

public class Person {

    private String name;
    private String sex;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    public Person(){

    }

    public Person(String name, String sex, int age){  // 有参构造器
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    void eat(){
        System.out.println("我去吃饭拉");
    }

    void sleep(){
        System.out.println("我去睡觉拉");
    }

    void playGame(){
        System.out.println("我去打游戏拉");
    }

    public static void main(String[] args) {
        Person p = new Person();
        p.setName("楷楷");
        p.setSex("男");
        p.setAge(23);
        System.out.println(String.format("我叫%s,今年%d岁,性别%s",p.getName(),p.getAge(),p.getSex()));
        p.eat();
        p.sleep();
        p.playGame();
    }
}

输出结果:

我叫楷楷,今年23岁,性别男
我去吃饭拉
我去睡觉拉
我去打游戏拉

那么以上是我们如何使用封装来创建一个类和对象,下篇开始介绍类和类之间的一些关系。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值