首页 > 编程语言 >16-面向对象编程-封装

16-面向对象编程-封装

时间:2023-08-17 15:36:08浏览次数:33  
标签:p2 封装 name 16 age 访问 面向对象编程 public

面向对象编程有三大特征:封装、继承和多态

 

访问修饰符可以控制属性的访问范围

public:表示公共访问级别,可以被任何类访问。

protected:表示受保护访问级别,可以被类本身、子类和同一包中的类访问。

default(缺省):表示默认访问级别,即如果没有使用访问修饰符,默认是此级别,可以被同一包中的类访问。

private:表示私有访问级别,只能在类内部访问。

 

封装介绍

封装 (encapsulation) 就是把抽象出的数据 [属性] 和对数据的操作 [方法] 封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作 [方法] ,才能对数据进行操作。

换句话说,方法封装是将一些有共性的或多次被使用的代码提取到一个方法中,供其他地方调用。

封装的好处

避免代码冗余容易维护,隐藏代码实现的细节。

封装的实现步骤

1) 将属性进行私有化【不能直接修改属性】

2) 提供一个公共的 set()方法,用于对属性判断并赋值

3) 提供一个公共的 get()方法,用于获取属性的值

//封装案例,要求不能随便查看人的年龄隐私,并对设置的年龄进行合理的验证。年龄合理就设置,否则默认
//年龄必须在1-120,年龄不能直接查看

public class Encapsulation01 {
    public static void main(String[] args) {
        Person p = new Person();
        p.name = "马铃薯";
        p.setAge(26);

        System.out.println("姓名:" + p.name + "\t年龄:" + p.getAge());

    }
}

class Person{
    //名字是公共的
    public String name;
    //年龄是私有的,private修饰符表示只能在当前类内访问
    private int age;

    //创建get()方法,用于对属性判断并赋值
    public int getAge() {
        return age;
    }
    //创建set()方法,用于获取属性的值
    public void setAge(int age) {
        if(age >= 1 && age <= 120){
            this.age = age;
        }else{
            System.out.println("年龄设置不合理,需要在 1-120 之间!");
            this.age = 0;
        }
    }
}

构造器 与 set()方法相结合

构造器主要是完成对新对象的初始化,而 get() 和 set()方法则是完成对属性的获取和赋值。

public class Encapsulation02 {
    public static void main(String[] args) {
        Person2 p2 = new Person2("马铃薯", 26);
        System.out.println("姓名:" + p2.name + "\t年龄:" + p2.getAge()); //姓名:马铃薯    年龄:26

        p2.name = "任先生";
        p2.setAge(18);
        System.out.println("姓名:" + p2.name + "\t年龄:" + p2.getAge()); //姓名:任先生    年龄:18
    }
}

class Person2{
    public String name;
    private int age;

    //构造方法
    public Person2(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //get() 和 set()方法
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

 

标签:p2,封装,name,16,age,访问,面向对象编程,public
From: https://www.cnblogs.com/REN-Murphy/p/17637700.html

相关文章

  • 《剑指Offer》-16-数值的整数次方
    将n次相乘的幂运算转化为log2N次平方运算,并且采用递归算法原书给出的最优算法本身不处理负数,是外层函数处理的 doublemyPow(doublex,intn){ doubleres=pow(x,abs(n)); if(n<0)res=1/res; returnres; } doublepow(doublex,intn){ if(n==......
  • 类和对象(封装)
    c++面向对象的三大特性:封装、继承、多态。封装将属性和行为作为一个整体,表现生活中的事物。将属性和行为加以权限控制。 意义1:在设计类的时候,属性和行为写在一起,表现事物。实例化:通过一个类创建一个对象的过程。语法:class类名{  访问权限: 属性 /行为  };类中的属性和......
  • 8-17|2023-08-16 12:33:55,972 [salt.master :1643][ERROR ][20321] Received
    该日志条目显示了来自于Saltminion(在这里标识为`[master]`,这可能是minion的名称或者是由于其他原因导致的日志格式)的错误,表示minion在执行一个函数时发生了异常。日志内容“`Theminionfunctioncausedanexception`”表示在minion端执行的特定Salt函数引发了一个错误或异常。......
  • 【2023-08-16】公事公办
    20:00工作是一件好事,而我们每个人都有许多工作要干;它有益于身心健康,使我们不会感到无聊,不会干坏事。比起金钱和时装来,它更能给我们一种能力感和独立感。                                      ......
  • 2023.8.16
    今天早上睡到中午了,舒服,一想到回学校就十分的激动,中午打开瓦罗兰特学习到晚上,累了,回想这个假期真是差强人意啊,希望下个假期能好过一些,不过学校生活更好一些,能和室友一起就不无聊啦,在学校规律地生活,才是对我的最好礼物,明天就回去了。......
  • 20230816python学习日志
    在初始化属性中的类#person_class.pyclassPerson:population=0#初始化属性,用于计数def__init__(self,myAge):self.age=myAgePerson.population+=1#计数器defget_population(self):returnPerson.population......
  • 2023.8.16模拟赛总结
    T1Idiot的乘幂题目大意就是给\(a,b,c,d,p\)满足求解这题考场一开始发现\(\gcd(a,c)=1\)没啥用,后来发现其实很巧妙,直接辗转相除\(a,c\)同时维护\(\chi^a,\chi^c\)最后剩下来的就是\(\chi\)当然题解给了一个鬼才想到的做法构造\(\chi=\chi^1=\chi^{ax+cy}\)所以可以用exgc......
  • 8016: 重新排序 差分
    描述 给定一个数组 A 和一些查询 Li,Ri,求数组中第 Li 至第 Ri 个元素之和。小蓝觉得这个问题很无聊,于是他想重新排列一下数组,使得最终每个查询结果的和尽可能地大。小蓝想知道相比原数组,所有查询结果的总和最多可以增加多少?  输入 输入第一行包含一个整数......
  • 2023.8.16
    今天没做什么,主要是栈溢出差不多学完了,想花点时间再把基础打好一点今天去b站找到个pwn的视频,最近打算去看一下其中有关gdb调试的相关东西,恰好我调试相关的东西只会一点最简单的,想更好地去做pwn题,感觉这方面还是要学好。中间应该也会去找一些题目来做考虑到九月有竞赛,我在此之前......
  • 闲话8.16
    今天完完整整的在二南度过了一天,不算很舒服......