封装:
在面向对象程式设计方法中,封装(英语: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
基础概念来自https://www.runoob.com/java/java-encapsulation.html