面向对象变成思想,有三个基本特征:
- 封装 2.继承 3.多态
如何实现封装?
必须依赖于权限修饰符(访问控制修饰符)
权限修饰符使用的注意事项:
- 如果权限修饰符是在class前面(这里暂不讨论内部类),只能是public或缺省
- 如果权限修饰符是在类的成员前面(成员变量,成员方法等)四种都可以
1 、如何使用私有化的属性( private )
如果这个属性确实要被外部使用,需要提供 get 或 set 方法。
get 方法:供调用者获取属性值的方法
set 方法:供调用者修改属性值的方法
2 、 get/set 方法要注意的地方
( 1 )如果方法中有局部变量(通常是形参)与对象的实例变量 “ 重名 ” ,
那么需要在实例变量的前面加 "this.“ ,
如果没有重名问题,在实例变量前面可以加 "this.” ,也可以不加 "this.“
( 2 ) get/set 的方法名,通常都是
get + 属性名,并且属性名的首字母大写
set + 属性名,并且属性名的首字母大写
( 3 )如果属性(实例变量)是 boolean 类型,
那么它对应的 get 方法,就会把 get 单词换成 is 。
如果不使用私有化加条件判断,此段代码的年龄居然都可以设置负值
public static void main(String[] args) {
Student s1 = new Student();
/*s1.name = "张三";
s1.score = 89;
s1.age = 23;
//以上代码正常使用没问题,但是如果出现以下代码
s1.score = -89;
s1.age = -23;*/
//这样写,逻辑上有问题,语法上没法控制
//这里是调用者的角色,调用s1学生对象的姓名name的get和set
System.out.println("修改之前,姓名:" + s1.getName()); //null
s1.setName("张三");
System.out.println("修改之后,姓名:" + s1.getName()); //张三
System.out.println("修改之前,年龄:" + s1.getAge()) ; //0
s1.setAge(-23);
System.out.println("修改之后,年龄:" + s1.getAge()) ; //非法
}
public class Student {
private String name;
private int score;
private int age;
private boolean marry;
//快捷键,自动生成get/set
//按快捷键 Alt + Insert,部分同学需要同时按
public String getName() { return name; }
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public int getAge() {
return age;
}
public void setAge(int age) {
//加条件判断,加逻辑的控制
if(age<=20 || age>=35){
return;
}
this.age = age;
}
public boolean isMarry() {
return marry;
}
public void setMarry(boolean marry) {
this.marry = marry;
}
}
快捷键快速生成get和set:Alt + Insert