面向对象的编程学习
封装思想;
在一些类中不想被其他类访问或改变的一些数据,可以用private进行处理
用private定义的成员变量无法在其他类中访问,但可以通过类似于下列setName和getName在创建对象时访问用private定义的成员变量。
例如:我想定义一个GirlFriend类,在创建对象时,不想让其他类创建对象时随意输入该对象的年龄
package test1;
public class GirlFriend {
private String name;
private int age;
private String gender;
public GirlFriend() {
}
public GirlFriend(String name, int age, String gender) {
this.name = name;
if(age == 20){this.age = age;}
else{
System.out.println("年龄不是你想猜,想猜就能猜");
}
this.gender = gender;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
if(age == 20){this.age = age;}
else{
System.out.println("年龄不是你想猜,想猜就能猜");
}
}
/**
* 获取
* @return gender
*/
public String getGender() {
return gender;
}
/**
* 设置
* @param gender
*/
public void setGender(String gender) {
this.gender = gender;
}
public String toString() {
return "GirlFriend{name = " + name + ", age = " + age + ", gender = " + gender + "}";
}
public void sing(){
System.out.println("我能唱歌");
}
}
测试代码GirlFriendTest
package test1;
public class GirlFriendTest {
public static void main(String[] args) {
GirlFriend k = new GirlFriend();
k.setName("小蕾");
k.setAge(25);
k.setGender("女");
System.out.println("姓名:" + k.getName());
System.out.println("年龄:" + k.getAge());
System.out.println("性别:" + k.getGender());
k.sing();
}
}
此时因为创建对象时输入的年龄不是20,没有触发this关键字,即this.age = age,所以打印出的年龄结果应该是0,因为在getAge方法里,return的age在没有使用this关键字的情况下,会自动选择离他近的成员变量age进行return,而在定义int类型的成员变量时,默认值为0,即在控制台年龄会输出为0.
而在输入年龄为20的时候,在this.age = age下,则把输入的age传递给GirlFriend类里的age,而在getAge方法里也会就近的选择成员变量age,但由于成员变量里的age已经变成传递来的20,则在getAge方法里返回的就是20.