天天看点

封装性

面向对象的第一个特征,先观察以下的代码,看是否会存在问题:

class Person{

         // 属性

         String name ;

         int age ;

         public void talk(){

                   System.out.println("姓名:"+name+",年龄:"+age) ;

         }

};

public class OODemo05{

         public static void main(String args[]){

                   Person p = null ;

                   p = new Person() ;

                   p.name = "张三" ;

                   <b>p.age = -30 ;</b>

                   p.talk() ;

       代码本身没有任何的语法错误,但是从实际来看,存在错误的,造成错误的根本原因在于把内容暴露给了外部用户。

       此时,就必须对所有的内容(不想被外部直接访问的)进行封装。

         <b>private</b> String name ;

         <b>private </b>int age ;

                   // 如果直接调用封装属性,程序是无法编译通过的

                   p.age = -30 ;

<b>修改代码:</b>

         private String name ;

         private int age ;

         public void setName(String str){

                   name = str ;

         public void setAge(int a){

                   if(a&gt;0&amp;&amp;a&lt;150)

                            age = a ;

         public String getName(){

                   return name ;

         public int getAge(){

                   return age ;

public class OODemo06{

                   // 如果要设置内容,则通过setter方法完成

                   p.setName("张三") ;

                   p.setAge(30) ;

       所有的验证功能要求在setter方法之中完成,而getter方法只是把值简单的返回。

       如果里面的属性是boolean值,则有以下两种返回方式:

         private boolean flag ;

         public void setFlag(boolean f){

                   flag = f ;

         // 取得值的时候就有两种代码形式:

         public boolean getFlag(){

                   return flag ;

         public boolean isFlag(){

<b>练习:</b>

定义并测试一个名为Student的类,包括属性有“学号”、“姓名”,以及3门课程“数学”、“英语”和“计算机”的成绩,包括的方法有计算3门课程的“总分”、“平均分”、“最高分”及“最低分”。

<b>注意:</b>

       · 所有的内容一定不要在类中输出,交给调用处输出。

       · 所有的属性必须封装

/*

         定义并测试一个名为Student的类,包括属性有“学号”、“姓名”,

         以及3门课程“数学”、“英语”和“计算机”的成绩,

         包括的方法有计算3门课程的“总分”、“平均分”、“最高分”及“最低分”。

*/

class Student{

         private String stuno ;

         private float math ;

         private float english ;

         private float computer ;

         public float sum(){

                   return math + english + computer ;

         public float avg(){

                   return this.sum() / 3 ;

         public float max(){

                   float max = math&gt;english?math:english ;

                   max = max&gt;computer?max:computer ;

                   return max ;

         public float min(){

                   float min = math&lt;english?math:english ;

                   min = min&lt;computer?min:computer ;

                   return min ;

         public void setStuno(String s){

                   stuno = s ;

         public void setName(String n){

                   name = n ;

         public void setMath(float m){

                   math = m ;

         public void setEnglish(float e){

                   english = e ;

         public void setComputer(float c){

                   computer = c;

         public String getStuno(){

                   return stuno ;

         public float getMath(){

                   return math ;

         public float getEnglish(){

                   return english ;

         public float getComputer(){

                   return computer ;

public class OODemo08{

                   Student s = new Student() ;

                   s.setStuno("s001") ;

                   s.setName("张三") ;

                   s.setMath(90.0f) ;

                   s.setEnglish(89.0f) ;

                   s.setComputer(99.0f) ;

                   System.out.println("总分:"+s.sum()) ;

                   System.out.println("平均分:"+s.avg()) ;

                   System.out.println("最高分:"+s.max()) ;

                   System.out.println("最低分:"+s.min()) ;

本文转自 李兴华 51CTO博客,原文链接:http://blog.51cto.com/lixinghua/91233,如需转载请自行联系原作者

继续阅读