A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 董志超 中级黑马   /  2013-3-14 09:21  /  2522 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 猫腻 于 2013-3-14 13:49 编辑

都在什么情况下类必须用public修饰,为什么要修饰?private呢?

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

10 个回复

倒序浏览
允许外部随意访问的方法或属性用public
只允许类内部访问的方法或属性用private
原因是有些东西不能暴露在外面
比如你得 名字  应该封存在比如 用户 类的里面
不能随意一个人都可以在外部直接修改你得名字

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
用public修饰方便外部程序调用,想要方便调用外部程序必须用public
private只能修饰内部类,外部类不能用private修饰
回复 使用道具 举报
  1. 包与包之间可以使用的权限只有两种,public  protected。


  2.              public   protected       default     private
  3. 同一个类中     ok         ok             ok          ok
  4. 同一个包中     ok         ok             ok
  5. 子类           ok         ok            
  6. 不同包中       ok

复制代码

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
1.public(公有的):可以被该类的和非该类的任何成员访问。
2.private(私有的):仅仅可以被该类的成员访问,任何非该类的成员一概不能访问。(主要是隐藏数据来保证数据的安全性)
3.protected(保护的):仅仅可以被子类和类本身还有同一个包里的类访问
一个.class文件中只能有一个public类,且main方法必须放在这个public类中。

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
这里你需要明确java权限修饰符的使用范围:

有四个访问控制符,分别为: 默认、public、private、protected
下面是资料说法:
public 同一个类,同一个包、不同包中的子类、不同包中的非子类
pravite 只能在同一个类中访问
protected,可以在同一个类、同一个包、不同包中的子类访问
默认:在同一个类、同一个包中访问

那么我就总结下:
public:所有的类都可以访问。
private:只有在同一个类中才可以访问。
protected:相同包和相同类里面子类中都可以访问,没有继承关系的就无权访问。
默认:相同的类和相同包里,可以访问

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
public  表公用外部可见,private只是本类可用,是私有的,外部访问必须通过这个类的公有方法访问
回复 使用道具 举报
如果你的类需要别人引用那么你肯定要public的!只是你自己用那么私有的就可以了!
回复 使用道具 举报
public表示公有访问权限,被public修饰的类属性及方法可以被处于任何包中的类访问,但你得在调用类中引入该类,方法improt 包.类
private表示私有访问权限,被private修饰的类的属性和方法只有本类才能访问
权限的引入有效解决类名重复的冲突,和实现了类的封装。

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
补充一点:一个“.java”可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。
其他用法楼上的都说了
回复 使用道具 举报
本帖最后由 聂斌 于 2013-3-15 02:36 编辑

下面这种情况下必须使用public修饰,,直接上代码:

package packa;

class DemoA           // 类不public那么其他包就访问不了,                    (a)
{
        void show()                 //show方法也是相当于被封装了,,,          (b)
        {
                System.out.println("demoa show run");
               
        }
}
编译时有2个地方报错:
(a)
编译时提示 ---.DemoA不是public的,,,,,
原因:有了包,范围变大,一个包中的类要被访问,必须要有足够大的权限,,所以被访问的类要被public修饰,,DemoA这个类权限不够大,得public修饰,,

(b)
编译时提示----show() 在 packa.DemoA 中不是公共的;无法从外部软件包中对其进行访问...
因为类公有后,被访问的成员也要公有才可以被访问。show()得public,,如果类不是public,而里面的被访问的成员是public的也没用,, 所以那个show方法也得 public ,,

总结;包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰。 类公有后,被访问的成员也要公有才可以被访问。

                       public   protected       default     private
同一个类中     ok         ok                 ok            ok       private只在本类中有效,
同一个包中     ok         ok                 ok
子类               ok         ok               
不同包中        ok



2... 还有一种情况下必须public   
接口里面的成员都是public的,,那么子类的方法也得是public的权限得一样大,不能变,

接口定义时,格式特点:
接口里面定义变量必须是public static final修饰,,,

接口中的成员都有固定修饰符。
        常量:public static final,,如果这里少写了final,只要是interface修饰的类,那么它会自动帮你加上final,少写static final,也会帮你加,少写public static final也会帮你加
        方法:public abstract   这里不写public abstract,他也会帮你加,,因为你只要写了interface,他里面的成员都有固定修饰符,你少写哪个,就给你补哪个
注意::接口中的成员都是public的。


3...private :私有,权限修饰符中的一种:用于修饰类中的成员(成员变量,成员函数)。私有只在本类中有效。

class Person
{
        private int age;
        public void setAge(int a)
        {
                if(a>0 && a<130)
                {
                        age = a;
                        speak();
                }
                else
                        System.out.println("feifa age");
        }

        public int getAge()
        {
                return age;
        }
        private void speak()
        {
                System.out.println("age="+age);
        }
}

private int age; 这个age已经被私有化在这个类当中,那么这个类以外是不可能访问到,外界不能直接访问了,,,将age私有化以后,类以外即使建立了对象也不能直接访问。


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马