4.3Java封装的细节

4.3Java封装的细节

类的属性的处理

  • 一般使用private访问权限---类的属性就是要不给别人使用

  • 提供相应的get/set方法来访问相关属性,这些方法通常是public修饰的,以提供对属性的赋值与读取操作---boolean变量的get方法是is开头!

  • 一些只用于本类的辅助性方法可以用Private修饰,希望其他类调用的方法用public修饰

实例:

/**
* 测试封装和访问修饰符
* @author Lucifer
*/
public class Person4 {
   /*
   碰到属性全部私有
    */
   private int id;
   private String name;
   private int age;
   private boolean man;

   //想让别人访问私有的属性就提供相应的set和get方法
   /*
   对name提供set方法,这样外部想去设置name的值直接调用方法
    */
   public void setName(String name){
       this.name = name;
  }

   //设置age
   public void setAge(int age){
       if(age>=0 && age <= 130){
           this.age = age;
      }else {
           System.out.println("Please input real age");
      }
  }
   /*
   高内聚
    */

   public String getName(){
       return this.name;
  }

   public int getAge(){
       return this.age;
  }
}
/**
* 测试封装
* @author Lucifer
*/
public class TestEncapsulation {

   private static Person4 p4;

   public static void main(String[] args) {
       Human h = new Human();
//       age = 13; //不可以对age赋值,因为age被封装起来了。age再其他类里面不可见
       h.name = "Lucifer";
       h.height = 170; //同一个包下的属性可以用

       p4 = new Person4();
       /*
       因为age被四有了访问不到只能通过setAge进行访问---方法进行访问
       通过private把属性变成私有并且暴露一个方法,利用这个方法对外控制
        */
       p4.setAge(-14);
       System.out.println(p4.getAge()); //上面设置了-14设置不进去,默认是0
//       p4.getName();
  }
}

上诉是JavaBean的封装实例,只有简单的封装没有复杂的逻辑判断

package cn.Lucifer.oo;

import javax.sound.midi.SysexMessage;

/**
* 测试JavaBean封装
* @author Lucifer
*/
public class Test2 {
   public static void main(String[] args) {
       Person2 p1 = new Person2();
       p1.setName("Lucifer");
       p1.setAge(-1000);
       System.out.println(p1);

       Person2 p2 = new Person2("James",300);
       System.out.println(p2);
  }
}

//写一个类,拥有两个private属性
class Person2{
   private String name;
   private int age;
   //写一个构造器
   public Person2(){

  }
   //这是个公共的构造器
   public Person2(String name, int age){
       this.name = name;
       //不能this.age直接赋值,因为age被private修饰符修饰了

  }

   //写一个修改name的set方法
   public void setName(String name){
       this.name = name;
  }
   //写一个返回name的get方法
   public String getName(){
       return this.name;
  }
   /*
   注意getName方法名要和前面setName方法里面的形参一致
    */

   //写一个修改age的set方法并且判断年龄是否合法
   public void setAge(int age){
       if(age > 130 || age < 0){
           System.out.println("Please input really age");
      }else {
           this.age = age;
      }
  }
   //写一个返回age的get方法
   public int getAge(){
       return this.age;
  }

   //重写toString
   @Override
   public String toString(){
       return "Person [Name =" + name + ",Age =" + age + "]";
  }
}

 

posted @ 2021-04-03 22:23  俊king  阅读(131)  评论(0编辑  收藏  举报