面向对象2---封装,this,构造方法

一.封装(private)

  1. 封装:把成员变量/方法私有化,在基本类里面提供他们公共的访问方法
  2. private关键字的作用:

    • 私有的,不可访问的
    • private可以修饰成员变量,也可以修饰成员方法
    • 被private修饰的成员只能在本类中访问,外界不能访问
  3. 公共的访问方法:set和/get方法(快捷键:Alt+Shift+s r)

/*
 * 一个手机类:
 *  成员变量:brand,price,color(将成员变量私有化,提供公共的访问方式)
 *  成员方法:手机特有的功能:打电话/玩游戏(将玩游戏的方法私有化)
 * */
//手机类
class Phone{
    private String brand;
    private int price;
    private String color;

    //提供公共的访问方法
    public String getBrand() {
        return brand;
    }
    public void setBrand(String b) {
        b = brand;
    }
    public int getPrice() {
        return price;
    }
    public void setPrice(int p) {
        p = price;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String c) {
        c = color;
    }

    //打电话的成员方法
    public void call(){
        System.out.println("打电话");
    }

    //发短信的成员方法
    private void playGames(){
        System.out.println("玩游戏");
    }
}
//测试类
public class Demo {
    public static void main(String[] args){
        //创建手机类的对象
        Phone p = new Phone();

        //利用公共的访问方法给变量赋值
        p.setBrand("美图");
        p.setColor("粉色");
        p.setPrice(3500);

      //报错,成员变量是私有的,必须用公共的访问方法
//      System.out.println(p.Brand()+","+p.Color()+","+p.Price());

        System.out.println(p.getBrand()+","+p.getColor()+","+p.getPrice());

        p.call();

      //报错,私有的成员方法,只能在本类中访问,外界不能访问
//      p.playGames();
    }
}

这里写图片描述


二.this关键字

  1. this关键字:代表所在类的对象引用
  2. this的应用场景:局部变量隐藏成员变量
/*
 * 一个手机类:
 *  成员变量:brand,price,color(将成员变量私有化,提供公共的访问方式)
 *  成员方法:手机特有的功能:打电话/玩游戏(将玩游戏的方法私有化)
 * */
//手机类
class Phone1{
    private String brand;
    private int price;
    private String color;

    //提供公共的访问方法
    public String getBrand() {
        return brand;
    }
    public void setBrand(String brand) {
        this.brand = brand;
        //第一个brand为成员变量,第二个为局部变量
        //局部变量和成员变量名称一致:就近原则:局部变量隐藏了成员变量
        //为了区分成员变量和局部变量java提供了this关键字
    }
    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }

    //打电话的成员方法
    public void call(){
        System.out.println("打电话");
    }

    //发短信的成员方法
    private void playGames(){
        System.out.println("玩游戏");
    }
}
//测试类
public class Demo2 {
    public static void main(String[] args){
        //创建手机类的对象
        Phone1 p = new Phone1();

        //利用公共的访问方法给变量赋值
        p.setBrand("美图");
        p.setColor("粉色");
        p.setPrice(3500);

        System.out.println(p.getBrand()+","+p.getColor()+","+p.getPrice());

        p.call();
    }
}

这里写图片描述


三.构造方法

  1. 构造方法:给对象的数据进行初始化
  2. 构造方法格式:

    • 方法名与类名相同
    • 没有返回值类型,连void都没有
    • 没有具体的返回值
  3. 构造方法的注意事项:

    • 如果你不提供构造方法,系统会给出默认的无参构造方法
    • 如果你提供了构造方法,系统将不再提供
    • 构造方法也是可以重载的
class Student{
    private String name;
    private int age;

    //提供公共的访问方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    //提供构造方法,构造方法是可以重载的

    //带有一个参数的构造方法
    public Student(String name){
        this.name = name;
    }

    //带两个参数的构造方法
    public Student(String name,int age){
        this.name = name;
        this.age = age;
    }
}
public class Demo {
    public static void main(String[] args){
        Student s1 = new Student("王一");
        s1.setAge(20);
        System.out.println(s1.getName()+","+s1.getAge());

        Student s2 = new Student("王二",22);
        System.out.println(s2.getName()+","+s2.getAge());
    }
}

这里写图片描述
4. Student s = new Student()这一句话做了几件事情?
Student s在栈内存中分配空间
new Student()在堆内存中申请空间
通过加载Student类加载成员变量(默认的初始化值)
显示初始化(通过构造方法对数据进行初始化)
通过创建对象进行赋值操作
给堆内存标记一个内存空间的地址值,Student s里面的地址值间接的指向

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值