封装:
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
一.封装的优点
1. 良好的封装能够减少耦合。
2. 类内部的结构可以自由修改。
3. 可以对成员变量进行更精确的控制。
4. 隐藏信息,实现细节。
二.实现JAVA封装的步骤:
1.将属性访问权限一般设置为private
public class Student{
private String name;
private int age;
}
这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:
public class Student{
private String name;
private int age;
public void getName(){
return name;
}
public void getAge(){
return age;
}
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
}
}
set get方法生成快捷键 alt+shift+s
采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。
//private是一个访问修饰符,用private修饰的属性或者方法只能在该类的内部使用
//我想单独获取age属性值
System.out.println(stu.getAge());
案例:
练习1(基础):
定义一个表示学生信息的类Student,要求如下:
(1)类Student的成员变量:
sNO 表示学号;sName表示姓名;sSex表示性别;sAge表示年龄;sJava:表示Java课程成绩。
(2)类Student带参数的构造方法:
在构造方法中通过形参完成对成员变量的赋值操作。
(3)类Student的方法成员:
getNo():获得学号;
getName():获得姓名;
getSex():获得性别;
getAge()获得年龄;
getJava():获得Java 课程成绩
根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。
1 package day07;
2
3 public class Student {
4
5 private int sNo;
6 private String SName;
7 private String sSex;
8 private int sAge;
9 private double sJava;
10
11
12
13 public Student(int sNo,String SName,String sSex,int sAge,double sJava){
14 this.sNo=sNo;
15 this.SName=SName;
16 this.sSex=sSex;
17 this.sAge=sAge;
18 this.sJava=sJava;
19
20
21 }
22
23
24
25
26 public int getsNo() {
27 return sNo;
28 }
29 public void setsNo(int sNo) {
30 this.sNo = sNo;
31 }
32 public String getSName() {
33 return SName;
34 }
35 public void setSName(String sName) {
36 SName = sName;
37 }
38 public String getsSex() {
39 return sSex;
40 }
41 public void setsSex(String sSex) {
42 this.sSex = sSex;
43 }
44 public int getsAge() {
45 return sAge;
46 }
47 public void setsAge(int sAge) {
48 this.sAge = sAge;
49 }
50 public double getsJava() {
51 return sJava;
52 }
53 public void setsJava(int sJava) {
54 this.sJava = sJava;
55 }
56
57
58 //public static void main(String[] args) {
59 // Student[] stu=new Student[5];
60 // stu[0] =new Student(10,"张三","男",18,68);
61 // stu[1] =new Student(11,"李四","女",18,98);
62 // stu[2] =new Student(12,"张三","男",18,68);
63 // stu[3] =new Student(13,"张三","男",18,88);
64 // stu[4] =new Student(14,"张三","男",18,75);
65 //
66 // int max=(int) stu[0].sJava;
67 // int min=(int) stu[0].sJava;
68 // int avg=0;
69 // int sum=0;
70 // for(int i=0;i<stu.length;i++){
71 // sum=sum+(int) stu[i].sJava;
72 // avg=sum/stu.length;
73 //
74 // if(max<stu[i].getsJava()){
75 // max=(int) stu[i].getsJava();
76 // }if(min>stu[i].getsJava()){
77 // min=(int) stu[i].getsJava();
78 // }
79 //
80 //
81 // }
82 // System.out.println("最大值为"+max);
83 // System.out.println("最小值为"+min);
84 // System.out.println("平均分为"+avg);
85 // }
86
87 }
测试类调用:
1 package day07;
2
3 public class TestStudent {
4
5 public static void main(String[] args) {
6
7 Student[] stu=new Student[5];
8 stu[0] =new Student(10,"张三","男",18,68);
9 stu[1] =new Student(11,"李四","女",18,98);
10 stu[2] =new Student(12,"张三","男",18,68);
11 stu[3] =new Student(13,"张三","男",18,88);
12 stu[4] =new Student(14,"张三","男",18,75);
13
14 int max=(int) stu[0].getsJava();
15 int min=(int) stu[0].getsJava();
16 int avg=0;
17 int sum=0;
18 for(int i=0;i<stu.length;i++){
19 sum=sum+(int) stu[i].getsJava();
20 avg=sum/stu.length;
21
22 if(max<stu[i].getsJava()){
23 max=(int) stu[i].getsJava();
24 }if(min>stu[i].getsJava()){
25 min=(int) stu[i].getsJava();
26 }
27
28
29 }
30 System.out.println("最大值为"+max);
31 System.out.println("最小值为"+min);
32 System.out.println("平均分为"+avg);
33 }
34 }
35
36