zoukankan      html  css  js  c++  java
  • 章节三、6-Getters-Setters和this关键字part02

    一、如何在一个类中创建另外一个类的对象,然后用这个类的对象的引用来访问这个对象里面的成员,如下:

    //如何在一个类中创建另外一个类的对象,然后用这个类的对象的引用来访问这个对象里面的成员
        Car bm = new Car();
        bm.setYear(1949);
        System.out.println(bm.getYear());

    二、为什么我们要用私有修饰符来修饰变量,然后通过get和set方法来访问?

    通过get和set这种间接的方式来访问私有变量,其实是用到了java中的“封装”。

    隐藏实现细节,对外提供公共的访问方式,私有的成员变量,比如make只能在Car类中被直接访问,而其它的类,比如ClassDemo只能通过set和get方式来调用访问,这样做的目的是为了安全,同时通过set和get方法来访问能够做判断,如果在传值的时候传入的是非法值,set判断后就不会允许成功赋值,举例如下(对年份进行判断):

    package introduction;
    
    public class Car {
        
        //颜色
        private String color;
        //生成商
        public String make;
        //型号
        private String model;
        //年份
        private int year;
    
        //车拥有一个加速度的功能
        public void acceleration() {
        System.out.println("加速度了.....");
        }
        /*
         * 为了能够区分下面这段话,这里我们将表示生产商的make定义为make1,setMake中的make
         * 定义为make2,此处为了方便其它类调用,所以取名相同。
         * 因为需要给make2这个变量赋值,但上面已经定义了make1是一个字符串类型的变量,
         * 所以这里同样需要一个字符串类型的变量来进行接收,也取名叫make2,方便给make2赋值,
         * 同时也方便调用者进行区分,
         * 如果在方法主体中写成make2=make2,那么表示的都是setMake中的参数列表的中make,
         * 这个make2是局部变量,make1是成员变量。
         * 所以为了区分这两个make,就有了关键字this,
         * 使用格式为“this.”,使用了该关键字后就能够区分局部变量和成员变量,
         * 在成员变量前面加上this后变为“this.make=make”
        */
        public void setMake(String make) {
            //哪个对象来调用setMake方法,这个this就给哪个对象里的成员变量赋值
            this.make = make;
        }
        //因为make是字符串类型,所以返回的make也是字符串类型,
        //get的目的是为了返回这个成员变量的值给调用者
        public String getMake() {
            return this.make;
        }
        public String getColor() {
            return color;
        }
        public void setColor(String color) {
            this.color = color;
        }
        public String getModel() {
            return model;
        }
        public void setModel(String model) {
            this.model = model;
        }
        public int getYear() {
            return year;
        }
        public void setYear(int year) {
            if(year>1990) {
            this.year = year;
            }else {
                System.out.println("年份无效");
            } 
        }
    }

    在ClassDemo类中调用:

    Car bm = new Car();
        bm.setYear(1997);
        System.out.println(bm.getYear());

    结果:

    传入的值大于“1990”则显示传入的值,否则显示为“年份无效”并显示默认值“0”(这就是私有权限时使用set能够方便进行判断)

    三、封装:是面向对象的重要法则,就是把对象的属性和行为结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。

    四、凡是访问了对象里数据的方法,都有this的引用,只是当变量名重名时才显式的写出了加以区分。

  • 相关阅读:
    圣战 [奇环, 树上差分]
    花火之声不闻于耳 [线段树]
    SP2878 KNIGHTS
    P5300 [GXOI/GZOI2019]与或和 [单调栈]
    Speike [线段树, 动态规划]
    Jerry [动态规划]
    JSON对象
    正则书写
    flex布局实践
    数组对象的深拷贝与浅拷贝
  • 原文地址:https://www.cnblogs.com/luohuasheng/p/9511053.html
Copyright © 2011-2022 走看看