一、封装
封装:告诉我们如何正确设计对象的属性和方法
对象代表什么,就得封装对应的数据,并提供数据对应的行为
封装的好处:
-
降低学习成本,可以少学,少记,或者说压根不用学,不用记对象有哪些方法,有需要时去找就行
二、Private关键字:
-
可以修饰成员变量(成员变量和成员方法)
eg:
package com.itheima.Class;
public class Girlfriend01 {
//属性
private String name;
private int high;
private String gender;
private int age;
//针对于每一个私有化的成员变量,都需要提供get和set方法
// set方法:给成员变量赋值
// get方法:在提供成员变量的值
//作用:给成员变量name进行赋值
public void setName(String n {//变量有参数但是无返回值,需要接收数据,不需要提供结果
name = n;
}
public String getName( {//作用:对外提供内的属性,不需要接收数据,需要对外输出结果,需要有返回值
return name;
}
// setAge:给成员变量age进行赋值
public void setAge(int a {//只接收数据,变量有参数,但是没有返回值
if (age >= 16 && age <= 50 {
age = a;
} else {
System.out.println("非法数据";
}
}
public int getAge( {
return age;
}
public void setHigh(int h {
high = h;
}
public int getHigh( {
return high;
}
public void setGender(String g {
gender = g;
}
public String getGender( {
return gender;
}
//行为
public void eat( {
System.out.println("她会吃饭";
}
public void play( {
System.out.println("她会干活";
}
}
package com.itheima.Class;
public class Girlfriend01Test01 {
public static void main(String[] args {
Girlfriend01 p1 = new Girlfriend01(;//创建一个对象
p1.setName("小诗诗";
p1.setAge(18;
p1.setGender("女";
p1.setHigh(170;
System.out.println(p1.getName(;
System.out.println(p1.getAge(;
System.out.println(p1.getGender(;
System.out.println(p1.getHigh(;
p1.eat(;
p1.play(;
Girlfriend01 p2 = new Girlfriend01(;//创建第二个对象
p2.setName("筱筱";
p2.setAge(22;
p2.setGender("男";
p2.setHigh(168;
System.out.println(p2.getName(;
System.out.println(p2.getAge(;
System.out.println(p2.getGender(;
System.out.println(p2.getHigh(;
p2.eat(;
p2.play(;
}
}
运行结果:
小诗诗
18
女
170
她会吃饭
她会干活
筱筱
22
男
168
她会吃饭
她会干活
总结:
-
可以修饰成员(成员变量和成员方法)
-
针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作:
2、提供”getXxx()“方法,用于获取成员变量的值,方法用public修饰
三、this.关键字
成员变量和局部变量:
-
局部变量:把变量定义在方法里面叫做局部变量
this的作用:
就近原则:
当定义的类和方法里面都有相同的变量,对于输出语句而言,成员变量和局部变量哪个变量对输出语句更近,程序就会打印哪个变量对应的值
public class Gilrfirend{
private int age;
public void method({
int age = 10;
system.out.println(age
}
}
运行结果:
如果我们要打印私有类的age,那么就要使用this.关键字:
public class Gilrfirend{
private int age;
public void method({
int age = 10;
system.out.println(this.age
}
}
运行结果:0
eg:
package com.itheima.Test002;
public class Girlfriend01 {
//属性
private String name;
private int high;
private String gender;
private int age;
public void setName(String name {
this.name = name;//直接使用成员变量,不使用局部变量
/*等号右边的name触发就近原则表示局部变量string name,
而string name记录的是主方法里面的setName传递过来的诗诗
局部变量表示测试类中调方法传递过来的数据
*/
//等号的左边表示成员位置的name
}
public String getName( {
return name;
}
public void setAge(int age {
if (age >= 16 && age <= 50 {
this.age = age;//直接使用成员位置的age
} else {
System.out.println("非法数据";
}
}
public int getAge( {
return age;
}
public void setHigh(int high {
this.high = high;//直接使用成员变量,不使用局部变量
}
public int getHigh( {
return high;
}
public void setGender(String gender {
this.gender = gender;//直接使用成员变量,不使用局部变量
}
public String getGender( {
return gender;
}
//行为
public void eat( {
System.out.println("她会吃饭";
}
public void play( {
System.out.println("她会干活";
}
}
package com.itheima.Test002;
import com.itheima.Test001.Girlfriend01;
public class Girlfriend01Test01 {
public static void main(String[] args {
Girlfriend01 p1 = new Girlfriend01(;//创建一个对象
p1.setName("小诗诗";
p1.setAge(18;
p1.setGender("女";
p1.setHigh(170;
System.out.println(p1.getName(;
System.out.println(p1.getAge(;
System.out.println(p1.getGender(;
System.out.println(p1.getHigh(;
p1.eat(;
p1.play(;
com.itheima.Test001.Girlfriend01 p2 = new Girlfriend01(;//创建第二个对象
p2.setName("筱筱";
p2.setAge(22;
p2.setGender("男";
p2.setHigh(168;
System.out.println(p2.getName(;
System.out.println(p2.getAge(;
System.out.println(p2.getGender(;
System.out.println(p2.getHigh(;
p2.eat(;
p2.play(;
}
}
运行结果:
小诗诗
18
女
170
她会吃饭
她会干活
筱筱
22
男
168
她会吃饭
她会干活