封装是面向对象的思想特性
一.封装
1.封装的定义
封装:将抽象性函式接口的实现细节部分包装隐藏起来的方法。
2.封装的步骤
对属性的封装:
对成员变量加修饰符private
在类中书写set和get方法进行对属性的赋值和取值
public class Person {
private String name;
private int age;
private int weight;
}
这段代码中对name、weight和age用private修饰,也就意味着将这两个属性封装了 ,通过其他方法访问不了。
需要通过set和get方法来赋值取值
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
完整代码:
class Cat{
private String name;//对姓名封装
private int age;//对年龄封装
private int weight;//对体重封装
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
}
public class Demo3 {
public static void main(String[] args) {
Cat cat = new Cat();
//通过set进行赋值
cat.setName("小黑");
cat.setAge(2);
cat.setWeight(20);
System.out.println("姓名: "+cat.getName());
System.out.println("年龄: "+cat.getAge());
System.out.println("体重: "+cat.getWeight());
}
}
运行结果:
我们创建了一个猫类,猫类里面有姓名,年龄,体重,并且封装了Cat类的属性,就不能通过对象.属性来赋值了,就要通过set方法赋值和get方法取值。
二.this.关键字
写在类中代表当前对象
可以使用this关键字调用属性和方法
this关键字只能在方法(成员方法和构造方法)中使用
可以调用当前的构造方法
只能在构造方法中调用构造方法
this ()只能在构造方法中放在第一行
this.属性名
class Person{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name,int age) {
this.name = name;
this.age = age;
}
}
public class Demo4 {
public static void main(String[] args) {
Person person = new Person("张三", 20);
System.out.println("姓名: "+person.getName());
System.out.println("年龄:"+person.getAge());
}
}
运行结果:
this.方法名
class Dog{
public void play() {
System.out.println("正在执行play方法");
}
public void run() {
this.play();
System.out.println("正在执行run方法");
}
}
public class Demo5 {
public static void main(String[] args) {
Dog dog = new Dog();
dog.run();
}
}
其中通过this.paly()在run方法中调用另一个play方法。
三.多类合作
一个类对象可以当成另一个类的成员变量
案例:
class People{
private Student student;
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}
class Student{
private String name;
private char sex;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Demo6 {
public static void main(String[] args) {
People people = new People();
Student student = new Student();
student.setName("张三");
student.setSex('男');
student.setAge(20);
people.setStudent(student);
System.out.println("学生姓名: "+people.getStudent().getName());
System.out.println("学生性别: "+people.getStudent().getSex());
System.out.println("学生年龄: "+people.getStudent().getAge());
}
}
运行结果: