JAVA入门-011(Java类和对象思想-封装)

Java面向对象基础03-封装

为何封装

测试代码:

public class Phone {                    //定义手机类
    //成员变量
    String brand;                       //定义手机品牌
    int price;                          //定义手机价格
    String memory;                      //定义手机内存
    //成员方法
    public void call(){                 //定义手机打电话方法
        System.out.println("我在用"+brand+"打电话。");
    }
    public void sendMessage(){          //定义手机发短信方法
        System.out.println("我在用"+brand+"发短信。");
    }
    public void salfIntroduction(){          //定义手机发短信方法
        System.out.println("我的价格是"+price);
    }

}

public class MiPhone {
    public static void main(String[] args) {
        Phone Mi = new Phone();
        Mi.brand = "老米";
        Mi.price = -2999;
        Mi.memory = "128G";
        Mi.call();
        Mi.sendMessage();
        Mi.salfIntroduction();
    }
}

程序虽然没有报错,但是直接调用成员变量可能会带来隐患,比如价格不应该为负数。

private关键字

  • 是一个权限修饰符
  • 可以修饰成员(成员变量和成员方法)
  • 作用是保护乘员不被别的类使用,被private修饰的成员只有在本类中才能访问

针对被private修饰的成员变量,如果需要被其他类使用,提供相应的操作

  • 提供"get变量名()"方法,用于获取成员变量的值,方法用public修饰
  • 提供"set变量名(参数)"方法,用于设置成员变量的值,方法用public修饰

Idea中Code菜单下Generate可以自动生成setter和getter。
代码测试:

public class Phone {                    //定义手机类
    //成员变量
    private String brand;                       //定义手机品牌
    private int price;                          //定义手机价格
    private String memory;                      //定义手机内存
    //成员方法
    public void call(){                 //定义手机打电话方法
        System.out.println("我在用"+brand+"打电话。");
    }
    public void sendMessage(){          //定义手机发短信方法
        System.out.println("我在用"+brand+"发短信。");
    }
    public void salfIntroduction(){          //定义手机发短信方法
        System.out.println("我的价格是"+price);
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getMemory() {
        return memory;
    }

    public void setMemory(String memory) {
        this.memory = memory;
    }
}

public class MiPhone {
    public static void main(String[] args) {
        Phone Mi = new Phone();
        //Mi.brand = "老米";
        //Mi.price = -2999;
        //Mi.memory = "128G";
        Mi.setBrand("小米");
        Mi.setMemory("128G");
        Mi.setPrice(2999);
        System.out.println(Mi.getBrand()+"!"+Mi.getMemory()+"!"+Mi.getPrice());

        Mi.call();
        Mi.sendMessage();
        Mi.salfIntroduction();
    }
}

运行结果:
在这里插入图片描述

this关键字

代码测试:

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

当其他方法调用这个对象的setName时,会赋值失败。因为在有形参的情况下,方法内部会优先调用自己的局部参数,而不会主动使用方法的成员变量。
加上this关键字。

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

用this指定的变量就是对象的成员变量。

  • 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
  • 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量

什么时候使用this呢?
解决局部变量隐藏成员变量

this:代表所在类的对象引用

  • 记住:方法被哪个对象调用,this就代表那个对象

封装

封装概述
是面向对象的三大特征之一(封装、继承、多态)
是面向对象编程语言对客观世界的模拟,客观世界成员变量都是隐藏在对象内部的,外界是无法直接操作的

封装原则
将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现堆隐藏信息的操作和访问private成员变量,提供对象的getter和setter

封装的好处
通过方法来控制成员变量的操作,提高了代码的安全性
把代码用方法进行封装,提高了代码的复用性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值