访问(权限)修饰符和封装-10月19日讲课内容
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);
}
}
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »