1、封装
Java的三大特性:封装、继承、多态
封装时面向对象的思想的特性
对属性的封装 、 对方法的封装 、 对类进行封装 、 对项目进行封装
1.1对属性进行封装
1.成员变量加修饰符 private
2.在类中书写set 和 get 方法进行对属性的赋值和取值
package com.yu.test; public class Demo3 { public static void main(String[] args) { Dog2 dog = new Dog2(); dog.setAge(5); System.out.println(dog.getAge()); } } class Dog2 { private int age; //封装可以控制变量值的大小和范围 public void setAge(int age) { if(age > 10){ System.out.println("狗狗老了"); } this.age = age; } public int getAge() { return age; } }
总结:
就是要对成员变量就赋值和取值的 1.对实体类中的成员变量进行加private修饰 2.在实体类中 set方法进行赋值 get方法进行取值!!!
2、this关键字
字面意思:这个
1.写在类中,代表当前对象,可以使用this关键字调用属性和方法
this这个关键字只能在方法(成员方法和构造方法)中使用
2.this可以调用当前的构造方法(很少用)
(1) 只能在构造方法中去调用构造方法
(2)this() 只能在构造方法中放在第一行
package com.yu.test; public class Demo3 { public static void main(String[] args) { Dog2 dog = new Dog2(); dog.setAge(5); System.out.println(dog.getAge()); } } class Dog2 { private int age; public Dog2 () { //只能在构造方法的第一行,并且,不能同时调用两个构造方法 this(9); } public Dog2(int age) { } public Dog2(int age , int mun) { } public void setAge(int age) { if(age >=5) { System.out.println("狗狗老了"); } this.age = age; } public int getAge() { return age; } }
this关键字的注意事项:
1.调用成员变量。在构造方法,在成员方法 2.调用成员方法。在构造方法,在成员方法 3.this调用构造方法,只能能放在构造方法中的第一行,并且一个构造方法只能调用一个构造方法
3.类对象可以作为一个方法的参数
方法的参数可以是八大基本数据类型、String、数组
类对象也可以作为方法的参数
案例:
部门类
员工类
部门类下面有员工package com.yu.homework; class Branch{ String addres; //地址 Employee employee; //员工类 //员工类作为部门类方法的参数,可以实现用部门类调用员工的属性 public void command(Employee employee) { employee.work(); } } class Employee{ private String name; private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public void work() { System.out.println("上课"); } } public class Demo1 { public static void main(String[] args) { Employee employee = new Employee(); Branch branch = new Branch(); branch.addres = "Java郑州千峰培训班"; employee.setName("博哥"); System.out.print(employee.getName() + "在" + branch.addres); branch.command(employee); } }
4、多类合作【重点】
一个类的对象可以作为另一个类的成员变量
案例:
老师类
学生类
老师带了很多学生 把学生存倒数组中 Student[] students = new Student[6];package com.yu.homework; import java.util.Arrays; import java.util.Scanner; class Student{ private String student_name ; private int age; public String getStudent_name() { return student_name; } public void setStudent_name(String student_name) { this.student_name = student_name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } //老师类 class Teacher{ //private String name; private Student[] student;//定义一个学生数组 public Teacher() {} //无参构造 //有参构造传入学生对象数组 public Teacher(String name,Student[] student) { System.out.println("老师:" + name); for(int i = 0; i < student.length; i++) { //打印学生 System.out.println(student[i].getStudent_name() + " " + student[i].getAge()); } } // public String getName() { // return name; // } public Student[] getStudent_name() { return student; } } public class Demo2 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Student[] students = new Student[3]; for(int i = 0; i < students.length; i++) { students[i] = new Student(); } for(int i = 0; i < students.length; i++){ System.out.print("请输入学生姓名:"); String name = scanner.next(); students[i].setStudent_name(name); System.out.print("请输入学生年龄:"); int age = scanner.nextInt(); students[i].setAge(age); } System.out.println("请输入你老师的姓名:"); String teacher_name = scanner.next(); Teacher teacher = new Teacher(teacher_name , students); } }