【3】访问控制符 public, protected, private

本文深入解析Java中的公有(public)、受保护(protected)及私有(private)访问控制符的作用与应用场景,通过示例说明如何利用这些控制符保护类的属性和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public             公有的

protected       受保护的

private           私有的


这个三个词语用脚趾头猜都能知道是什么意思了,很简单,一切有万能的baidu, guge

通过这个三个字面意思可以了解到类的属性或方法能否在外部可以访问,什么是类的外部?,什么是类的内部?

    代码:         

class Elson { //1

    public String name = "elson"; 
    
    protected String duty;
    
    private int age = 10;
    
    public int showName(){
        return this.age;
    }

}//2

//那么1-2的范围就是指类Elson的内部,这个内部当然也是包含showName()这个方法,在showName()里面写东西也是
//属于在Elson类的内部


//那外部呢
public class Test{

    public static void main(String[] args){
    
        Elson ee = new Elson(); //顾名思义,对象 ee 当然就是在 Elson 的外部了
        //System.out.printf("%s\n", ee.name);         //elson
        //System.out.printf("%d\n", ee.age);          //error
	//System.out.printf("%d\n", ee.showName());   // 10
    }

}

那么JAVA的这三控制符就是相对于类的外部来讨论的,控制在外部对象能访问什么,不能访问什么,而在类的内部,无论是属性还是方法都是公开透明的

    例如上面的代码

        在外部直接访问私有的age,直接报错

        但是在类的内部通过showName()是可以返回(访问)private 的 age, 可以说是间接吧!

那这样有什么用呢?我们平时做些小项目都是自己写个class,然后自己在外部new个对象调用,一切都是自己一个人,这样访问控制符写公有私有保护(或许)都没什么区别,但我们思考下,假如我们是多人开发呢?!

        

/*
    我们做个假设,假如两个文件 classFile 和 objectFile
    classFile  : 只负责写类,不会new
    objectFile : include classFile文件进来,只负责new实例来用 

    classFile  由你来写
        然后 Elson 只能在 objectFile 引入 你的classFile 文件,只能使用你提供的类来操作,
    并无权限修改classFile文件
    
   现在有个打折的活动
    伪码
        class YourClass{//这个是你定义的类
            public double discount = 0.85;   //默认
            public double showPriceOfBook(){
                 return 0.85 * 50;
            }
        }

    那么Elson在外部是不是可以通过 
        $obj = new YourClass(); 
        $obj->showPriceOfBook();这样调用
    但并不是所有人都像Elson那样纯洁的,

    假设Jack也可以通过同样的方式进行操作,不过他多了步
       $obj = new YourClass();
       $obj.discount = 0.3;//搞破坏,随便设置折扣率
       $obj->showPriceOfBook();
    如果有万万千千的人都是使用你这个类,那么后果不堪设想,你总不能对这万万千千的人说不能自定义discount吧?
    所以我们可以
       private double discount = 0.85;
    那么外部的人就不能随便设置discount了,但这问题又来了,总公司定义book的折扣率为0.85,但旗下有很多小
    的分公司,他们之间或许有价格竞争,你总不能不让人家设置折扣率吧?行!只要在成本范围,你们随便设置
    所以我们可以加个方法
       private double discount = 0.85; //属性私有
       public double setter(double d){ //方法公有,以便外部调用   
          if(d < 0.5){ return false; } //你们随便设置 只要折扣率不低于0.5就行了
          this.discount = d;
          return this.discount;
       } 
    这样你心里就有底了,一切在控制范围之内
*/

    以上只是个人见解,一切需要你带着自己的思考去看待







转载于:https://my.oschina.net/u/573517/blog/194603

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值