JavaSE - 面向对象的三大特性之继承 (八)

一、目前程序存在的问题
无法保证数据的安全性,同时也无法保证数据的有效性

demo:在这里插入图片描述

二、封装的要求

1.private :私有的,被private 修饰的内容只能在类的内部使用

2.为私有的属性提供公开的get/set方法

  • 为属性赋值:set方法
    public void set属性名(数据类型 变量名){
            this.属性名 = 变量名;
    }
    注意:set属性名 --》属性名首字母大写
              形参数据类型取决于 赋值 的属性数据类型
  • 获取属性值:get方法
    public 数据类型 get属性名(){
           return this.属性名 ; // this. 可以省略
    }
    注意:get属性名 —》属性名首字母大写
    返回值的数据类型取决于 访问的属性数据类型
    在这里插入图片描述
public class TestStudent2{
    
    
 public static void main(String[] args){
    
    
  Student s = new Student();
  //s.name = "赵旭";
  s.setName("赵旭");
  //s.age = 380;
  // 外界为私有化的属性赋值:set
  s.setAge(38);
  //s.score = 99.0;
  s.setScore(99.0);
  // 访问私有的属性时:get
  System.out.println(s.getName()+"\t"+s.getAge()+"\t"+s.getScore());
  Student s2 = new Student("张飞",999,89.0);
  System.out.println(s2.getName()+"\t"+s2.getAge()+"\t"+
              s2.getScore());
 }
}
class Student{
    
    
 private String name;
 private int age; // 0~200
 private double score;// 0~100
 
 public Student(){
    
    }
 public Student(String name,int age,double score){
    
    
  this.name = name;
  //this.age = age;
  setAge(age);
  //this.score = score;
  setScore(score);
 }
 
 // set:为私有属性赋值(0~150)
 public void setAge(int age){
    
    
  // 进行数据有效性检测
  if(age>=0 && age <=150){
    
    
   this.age = age;
  }else{
    
    
   System.out.println("年龄数据无效~");
  }
 }
 // get:获取私有属性的值
 public int getAge(){
    
    
  return this.age; //this. 可以省略
 }
 // name : set
 public void setName(String name){
    
    
  this.name=name;
 }
 public String getName(){
    
    
  return this.name;
 }
 
 // score
 public double getScore(){
    
    
  return this.score;
 }
 public void setScore(double score){
    
    
  if(score>=0 && score<=100){
    
    
   this.score=score;
  }else{
    
    
   System.out.println("分数输入有误...");
  }
 }
}
三、封装的意义
  • 保护数据的安全性,可以对数据进行有效性检测
  • 对外只提供对应的功能,但是屏蔽具体实现的细节
四、封装小结
  • 属性私有化:private修饰符属性
  • 为私有化的属性提供公开的 get/set方法

猜你喜欢

转载自blog.csdn.net/Java_lover_zpark/article/details/104851264