草庐IT

《Java》private、protected、public区别及解析

Java冰激凌 2024-01-28 原文


我们今天来给大家解析一下Java中四种修饰类型的区别。
那么有的老铁就疑惑了,文章名称不是说三种吗?其实还有一种隐藏的修饰类型(默认类型)英文翻译过来的话是defult,这就是我们什么都不修饰,例如:int a=0; 那么这个a就是默认类型的。我们今天将结合一个实例来帮助老铁们理解这块知识点

首先我们知道,QQ这个东西我们用的都很熟系吧。他有很多增值业务。能让你享受到更多的特权以及更好的体验。而QQ中的会员是最有代表性的,我们将其划分为四项:普通用户、QQ会员(VIP)、QQ超级会员(SVIP)、QQ大会员

private(普通用户)

private:代表封装的意思,对于一个手机的话,我们能看到的是有屏幕,机身,而内部的结构我们是看不到的,这就是封装的意义,使用范围是同一包中的同一类(普通用户功能)***

class Best{
    private int count;
    public int num;
}

public class Test {

    public static void main(String[] args) {
        Best best=new Best();
        best.count=1;
        best.num=2;
    }
}

我们可以看到,在使用best访问count是会变红的,代表不可以使用,那么被private修饰的变量在其他类如何访问呢?

class Best{
    private int count;
    public int num;

    public void setCount(int count) {
        this.count = count;
    }

    public int getCount() {
        return count;
    }
}

public class Test {
    public static void main(String[] args) {
        Best best=new Best();
        best.setCount(1);
        //best.count=1;
        best.num=2;
    }
}

很多老铁已经想到的,是的!就是利用公开的方法来帮助修改与输出count的值!
对于QQ的普通用户也是一样的 ,如果想要使用尊贵的QQ会员才能够享受的功能,就必须动一点小脑筋。

default(QQ会员)

默认类型,开头已经介绍了,对于定义一个变量不做任何修饰的话就是默认类型,他的使用范围是同一包中的同一类(普通用户功能)、同一包中的不同类(QQ会员功能)

我们可以看到没有添加任何的修饰,我们的不同类还是可以访问的,那么同一个包是什么意思呢?


我们可以看到这个Demo1包,在这个包下的所有类都可以访问到这个变量
也就是我们尊贵的QQ会员,享受到了尊贵的体验与区别,是的!充钱使你变得强大!

protected(QQ超级会员)

protected:可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问,作用范围是同一包中的同一类(普通用户功能)、同一包中的不同类(QQ会员功能)、不同包中的子类(QQ超级会员功能);

是的,比 QQ会员要享受更多的特权,如果你感觉充钱还不够强!那么你可以再冲!


这个在应用中会有很多需要注意到的点 首先是子类,要继承父类才可以使用,而且在使用中 为何我还要写一个func方法呢,我们是否还记得静态方法中不能直接访问,所以我们需要一个非静态的方法来进行访问,这就是func方法的意义,对的,即使你再次充钱了!还是达不到你起飞的地步

public(QQ大会员)

对于老马旗下的游戏来说,只要你一直冲。你就是大佬,那么在你不断的金钱诱惑下,你也变得非常的强大了
public:可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问,这就是顶级的QQ增值业务,拥有横穿各个区域的钞能力。
是的!对于顶级用户(public)开通了大会员服务,任何的类跟包可以相互跳转使用,这无疑是体现了钞能力!

作用范围是同一包中的同一类(普通用户功能)、同一包中的不同类(QQ会员功能)、不同包中的子类(QQ超级会员功能)、不同包中的非子类(QQ大会员)

我们使用了QQ会员例子来给大家形象的举例了修饰限定符,不知大家理解了吗?

有关《Java》private、protected、public区别及解析的更多相关文章

  1. Ruby 解析字符串 - 2

    我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?

  2. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  3. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  6. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  7. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  8. ruby-on-rails - `a ||= b` 和 `a = b if a.nil 之间的区别? - 2

    我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行

  9. ruby-on-rails - Rails 6 中的 protect_from_forgery? - 2

    protect_from_forgery默认Rails6应用程序不包含在我的应用程序Controller中,但是有嵌入式ruby​​在主应用程序布局中。这是否意味着protect_from_forgery方法已经被抽象并且在应用程序Controller中不再明确需要?我买了实用程序员的Rails6一书,我唯一能找到的是“csrf_meta_tags()方法设置了防止跨站点请求伪造攻击所需的所有幕后数据”。 最佳答案 对于rails5.2和更高版本,默认情况下在ActionController::Base上启用。查看此提交:https

  10. ruby - 这两个 Ruby 类初始化定义有什么区别? - 2

    我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是

随机推荐