往者不可谏 来者犹可追

面向对象---封装

面向对象三大特征:
封装 继承 多态
有了封装,才有继承;有了继承,才有多态

面向对象的首要特征:封装
什么是封装?有什么用?
1、将属性隐藏起来,若需要访问某个属性,提供公共⽅法对其访问。

2、作用有两个:

保证内部结构的安全;
屏蔽复杂,暴露简单。

在代码级别上:
一个类体当中的数据,假设封装之后,对于代码的调用人员来说,不需要关心代码的复杂实现,只需要通过一个简单地入口就可以访问了;
另外,类体中安全级别较高的数据封装起来,外部人员不能随意访问,来保证数据的安全性。

/**

  • Person代表人类:
  •  每一个人都有年龄这样的属性
    
  •  年龄age,int类型
    
  •  先不使用封装机制,age属性是暴露的,可以在外部程序中随意访问,导致了不安全
    
  •  解决这个问题 : 封装  加private
    

*/

点击查看代码
public class Person {

    //实例变量(属性)
    int age;

}
//在外部程序中访问person这个类型中的数据

public class PersonTest {

    public static void main(String[] args) {
        //创建person对象
        Person p1 = new Person();
        System.out.println(p1.age); //读数据  (get)表示获取

        p1.age = 50; //修改数据 (set)表示修改/设置。 这里可以随意访问,表示不安全。
        System.out.println("您的年龄为:" + p1.age);

        //访问人的年龄
        /**
         * 访问一个对象的属性,通常包括两种操作:一种是读数据(get),一种是改数据(set)
         * */

    }

}

怎么进行封装?代码怎么实现? 第一步:属性私有化(使用private关键字)。private表示私有的,被这个关键字修饰后,该数据只能在本类中访问。 第二步:对外提供简单地操作入口 对外提供公开的get()和set()两个实例方法方法作为操作入口, 并且都不带static。 1个属性对外提供get()和set()方法。外部程序只能通过set()方法修改,只能通过get()方法读取。可以在set方法中设立关卡,保证安全性。

这些操作入口是否应该是方法呢?
写一个方法专门来完成读.(get)
写一个方法专门来完成写.(set)

Q: get()和set()方法应该带有static吗?应该定义为实例方法吗?
A:get读年龄,set改年龄,这个读和该都是操作的一个对象的年龄。所以不带static。是实例方法。(没有对象就没有年龄)
Q:通过‘类名’可以调用set和get方法吗?
A:不行。只有方法修饰符列表中有static的时候,才能使用‘类名.’的方式访问。

[修饰符列表] 返回值类型 方法名(形式参数列表)
注意:
java开发规范中有要求,set()方法和get()方法要满足以下格式。

  •  get()方法的要求:
    
    •  public 返回值类型 get + 属性名首字母大写(无参){
      
    •      return xxx;
      
    •  }
      
  •  set()方法的要求:
    
  •   public 返回值类型 set + 属性名首字母大写(有1个参数){
    
  •       xxx = 括号里的参数;
    
  •   }
    

//get()方法。读数据。

点击查看代码
<details>
<summary>点击查看代码</summary>

public void getAge(){
return age;
}

//set()方法
因为是改数据,所以要有参数类型。类型和变量类型一致。
public void setAge(int nianling){
age = nianling;
}

public class Person{

 private int age;  //属性私有化

 public int getAge(){
     return age;
 }

 //set()方法,可以设置关卡
 public void setAge(int nianling){
     if (nianling >6 || nianling<10) {
         System.out.println("你输入的年龄不合法");
     }
     age = nianling;
 }

}

</details>



public class PersonTest02 {
  public static void main(String[] args) {
   Person p1 = new Person();

        //Get方法
        System.out.println(p1.getAge());

        //Set方法(改)
        p1.setAge(20);
        System.out.println(p1.getAge());

        }
    }
posted @ 2022-09-17 09:46  你说你叫果郡王  阅读(53)  评论(0编辑  收藏  举报