访问(权限)修饰符和封装-10月19日讲课内容

2020-10-20T09:39:00

this关键字

概述

this代表所在类的对象引用,即当前对象

new 创建出来的对象

调用方法的对象

作用

1、调用本类中的属性和方法(区别成员变量和局部变量)

2、调用本类中的其他构造方法:this()

格式:
    this([参数...]);

会根据参数列表调用对应的构造方法
public Rabbit(String color) {
    // 调用本来中的属性
    this.color = color;
}

public Rabbit(String color, int age, double weight) {
    // 调用本类中的其他构造方法
    this(color);
    
    this.age = age;
    this.weight = weight;
}

【注意】

1、this()只能在构造方法中使用
2、this()只能在第一行
3、构造方法中不能同时出现两个this(),因为2
4、不能自己调用自己,不能相互调用

规范化this()

class Son {
    String name;
    int age;
    float salary;

    public Son() {
    }

    public Son(String name) {
        // 调用Son(String name, int age, float salary)
        this(name, 0, 0.0F);
    }

    public Son(String name, int age) {
        // 调用Son(String name, int age, float salary)
        this(name, age, 0.0F);
    }

    public Son(String name, int age, float salary) {
        this.name = name;
        this.age = age;
        this.salary = salary;
    }
}

总结

  • this表示的是当前对象
  • this可以调用本类中的属性和方法,最常用于区分成员变量和局部变量
  • this还可以调用本类中的构造方法,但是要注意有坑

访问(权限)修饰符

private(私有)关键字

1、可以修饰成员变量和成员方法

2、被private修饰的变量和方法仅本类中可用

3、被private修饰的变量需要提供get、set方法供类外调用使用    

4、boolean类型的 get 方法比较特殊:
    
    public boolean isName(String name){
        return name;
    }
public class Dog {
    private String name;
    int age;
    
    public String getName() {
        return this.name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    private void function() {
        System.out.println("method be execute!");
    }
    
    public void executeFunction() {
        this.function();
    }
}

Java中的访问修饰符

类内部同包下子类中非同包
public
protected×
默认不写××
private×××

总结

1、一般我们最常用的就是private和public,建议任何情况下都使用访问修饰符对变量和方法进行限制

2、public权限最高,整个项目中都可以访问(同一个项目),private权限最小,只能在本类中使用

3、被private修饰的变量和方法可以通过提供公共的方法对其进行访问

封装

面向对象三大特征

封装

继承

多态

概述

是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。核心是归纳总结

好处

提高代码的复用度、安全性,不必关心具体细节,便于开发

JavaBean 规范化封装

1. 要求Java中的所有实体类成员变量全部私有化,最少提供一个无参数构造方法,对应成员变量实现setter和getter方法
2. JavaBean规范,是为了后期开发汇总更好的代码适配度,提高代码运行的统一性,能够满足框架的使用
3. JavaBean规范只是一个规范,而且是作为一个基础规范,操作都是可以使用快捷键来完成的!!!
class Person {
    private String name;
    private int age;
    private char sex;
    private boolean alive;
    
    public Person() {}
    
    public String getName() {
        return this.name;
    }
    
    public int getAge() {
        return this.age;
    }
    
    public char getSex() {
        return this.sex;
    }
    
    public boolean isAlive() {
        return alive;
    }
    
    public void setAlive(boolean alive) {
        this.alive = alive;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public void setAge(int age) {
        this.age = age;
    }
    
    public void setSex(char sex) {
        this.sex = sex;
    }
}

类与类之间的调用(多类合作)

汽车类

public class Car {
    private String color;
    private float speed;
    private int tyreTotal;
    // 将自定义的引擎类作为汽车类的成员变量
    private Engine engine;

    public Car() {
        super();
    }

    public Car(String color, float speed, int tyreTotal, Engine engine) {
        super();
        this.color = color;
        this.speed = speed;
        this.tyreTotal = tyreTotal;
        this.engine = engine;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public float getSpeed() {
        return speed;
    }

    public void setSpeed(float speed) {
        this.speed = speed;
    }

    public int getTyreTotal() {
        return tyreTotal;
    }

    public void setTyreTotal(int tyreTotal) {
        this.tyreTotal = tyreTotal;
    }
    
    public Engine getEngine() {
        return engine;
    }

    public void setEngine(Engine engine) {
        this.engine = engine;
    }

    /**
     * 飙车方法,如果轮胎个数不为4,需要找修理厂
     */
    public void race() {
        if (4 == tyreTotal) {
            System.out.println("开着" + this.color + "颜色的保时捷以" + speed +  "迈的速度飙车");
        } else {
            System.out.println("轮胎出问题了,要找修理厂");
        }
    }
}

修理厂类

public class Factory {
    private String name;
    private String tel;
    private String address;
    
    public Factory() {
        super();
    }
    
    public Factory(String name, String tel, String address) {
        super();
        this.name = name;
        this.tel = tel;
        this.address = address;
    }

    public String getName() {
        return name;
    }

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

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
    
    /**
     * 修车方法,需要传入一辆汽车
     * 
     * @param car 传入需要修理的车对象
     * @return 返回修好的车
     */
    public Car fix(Car car) {
        
        System.out.println("欢迎来到" + this.name + "修车厂,我们的电话是:" + this.getTel() + ",我们的地址是:" + this.address);
        
        if (car.getTyreTotal() != 4) {
            car.setTyreTotal(4);    // 将轮胎改成4个
            car.setSpeed(80.0F);    // 速度降到80迈
            System.out.println("修车ing~~~");
        }

        // 拿到汽车的引擎
        Engine engine = car.getEngine();
        
        // 拿到引擎的名字和排量
        String engineName = engine.getName();
        float engineDisplacement = engine.getDisplacement();
        
        if (null != engineName) {
            System.out.println("检查引擎没有问题,排量是:" + engineDisplacement + "T");
        } 
        
        System.out.println("修理完毕");
        
        return car;
    }
}

引擎类

public class Engine {
    // 型号
    private String name;
    // 排量
    private float displacement;

    public Engine() {
        super();
    }

    public Engine(String name, float displacement) {
        super();
        this.name = name;
        this.displacement = displacement;
    }

    public String getName() {
        return name;
    }

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

    public float getDisplacement() {
        return displacement;
    }

    public void setDisplacement(float displacement) {
        this.displacement = displacement;
    }
}

测试类

public class TestCar {
    public static void main(String[] args) {
        
        // 这里有一个引擎
        Engine engine = new Engine();
        engine.setName("XX");
        engine.setDisplacement(1.0F);        
        
        // 买了一辆保时捷
        Car car = new Car("红色", 300.0F, 4, engine);

        // 飙车
        for (int i = 1; i <= 10; i++) {
            car.setSpeed(car.getSpeed() + 2);
            car.race();
        }

        // 如果车的速度太快,达到了320迈,就会爆胎
        if (car.getSpeed() >= 320.0) {
            // 有一个车轱辘爆胎了
            car.setTyreTotal(3);
        }

        // 继续飙车
        car.race();

        // 找修理厂
        Factory factory = new Factory("摇滚王子修车厂", "15844517927", "吉安");

        // 修车,拿到修好的车
        Car fixedCar = factory.fix(car);

        // 飙车
        for (int i = 1; i <= 10; i++) {
            fixedCar.setSpeed(fixedCar.getSpeed() + 2);
            fixedCar.race();
        }
        
        // 随便找个修车厂修车,此时我只关心修车,不在乎其他的内容
        // new Factory().fix(car);
    }
}
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »