黑马程序员技术交流社区

标题: 那个类什么时候需要被public修饰来 [打印本页]

作者: 银酱    时间: 2014-1-15 21:56
标题: 那个类什么时候需要被public修饰来
如题。。{:soso_e141:}
作者: 黄晓鑫    时间: 2014-1-15 22:03
如果你觉得其他包的类需要用到该类 就用protected 如果全部包都有一些类需要就用public 如果不需要访问就用default 如果不想被访问就用private 如果·不想被继承就用fina
作者: 黄晓鑫    时间: 2014-1-15 22:05

如果你觉得其他包的类需要用到该类 就用protected
如果全部包都有一些类需要就用public
如果不需要访问就用default
如果不想被访问就用private
如果不想被继承就用fina
作者: 银酱    时间: 2014-1-15 22:10
本帖最后由 银酱 于 2014-1-15 22:11 编辑
黄晓鑫 发表于 2014-1-15 22:05
如果你觉得其他包的类需要用到该类 就用protected
如果全部包都有一些类需要就用public
如果不需要访问就 ...

不是,我说的是类,不是类成员,我记得老毕说过可以这么写
public class A
{
}
但只有public可以 private什么的不能修饰类(内部类除外),但我忘了为什么可以用public了~
作者: 黄晓鑫    时间: 2014-1-15 22:15
因为权限够大 可以给他们类调用 如果其他类的权限够大 而调用的权限不够 还是不可以的
作者: 黄晓鑫    时间: 2014-1-15 22:17
刚才有一个错误就是private不能修饰类 只能修饰内部类 谢谢指导错误
作者: 银酱    时间: 2014-1-15 22:27
黄晓鑫 发表于 2014-1-15 22:15
因为权限够大 可以给他们类调用 如果其他类的权限够大 而调用的权限不够 还是不可以的 ...

是这个意思吗?
public class A
{
}
那么这个A类所有成员都能随意访问,而不用再在成员前面修饰public了是吗?
作者: 孤独的天奇    时间: 2014-1-15 22:31
淡然不是啦,成员是成员 类是类的 不能混了。
作者: 黄晓鑫    时间: 2014-1-15 22:33
不是的 类加public是方便与其他类创建这个对象并调用这个对象 而这个对象的修饰符必须是公有的才创建的到
比如你想去访问你爸爸 可能你爸爸在公司 你根本不知道你爸爸在公司的哪里 只有你爸爸跟你说我在公司的xx地方 你才找的到他是不是 不然你根本无法找到他
作者: 银酱    时间: 2014-1-15 22:34
黄晓鑫 发表于 2014-1-15 22:17
刚才有一个错误就是private不能修饰类 只能修饰内部类 谢谢指导错误

public class A
{
}
class B extends A
{
}
class TestDemo
{
        public static void main(String[] args)
        {
                System.out.println("Hello World!");
        }
}

编译出错:
TestDemo.java:1: 错误: 类A是公共的, 应在名为 A.java 的文件中声明
public class A
       ^
1 个错误
错误原因有点看不懂~~
作者: 不冬眠的蚂蚁    时间: 2014-1-15 22:42
类可以用public,默认(啥也不写) abstract, final 和
public:都可访问,同意源程序文件 同一包 不同包(import)
啥也不写的话 只能在同一源程序文件和同包中引用
作者: 不冬眠的蚂蚁    时间: 2014-1-15 22:43
这个问题不包括内部类吧 如果算内部类 我的回答也有问题了
作者: 银酱    时间: 2014-1-15 22:46
黄晓鑫 发表于 2014-1-15 22:33
不是的 类加public是方便与其他类创建这个对象并调用这个对象 而这个对象的修饰符必须是公有的才创建的到
...

创建的对象怎么用修饰符,没听明白;
比如
public class A
{
        public void show()
        {
                System.out.println("haha");
        }
}
class B
{
        void show()
        {
           A a=new A();
                a.show();
        }
}
我怎么用A类。。我发现我怎么编译都是错的~郁闷
作者: 黄晓鑫    时间: 2014-1-15 22:48
因为B类的权限不够大 A类一个是老板(public) B类一个是职工(default) 一个职工叫老板去做事情 你觉的可能吗?
作者: 银酱    时间: 2014-1-15 22:50
不冬眠的蚂蚁 发表于 2014-1-15 22:42
类可以用public,默认(啥也不写) abstract, final 和
public:都可访问,同意源程序文件 同一包 不同包(im ...

哦,关于包那方面的啊,我还没学到。
对了,下面代码为什么会编译失败啊
public class A
{
        public void show()
        {
                System.out.println("haha");
        }
}
class B
{
        void show()
        {
           A a=new A();
                a.show();
        }
}
作者: 黄晓鑫    时间: 2014-1-15 23:00
我不是说了吗 你这个连主函数都没有 而且B的权限要大于A的权限 这个在同一个类中可以不考虑权限问题
作者: 银酱    时间: 2014-1-15 23:04
黄晓鑫 发表于 2014-1-15 23:00
我不是说了吗 你这个连主函数都没有 而且B的权限要大于A的权限 这个在同一个类中可以不考虑权限问题 ...

主函数有的,我怕长没复制,B权限这么大于A权限啊,我试过B是public类 一样报错;
全代码入下:
public class A
{
        public void show()
        {
                System.out.println("haha");
        }
}
public class B
{
        public void show()
        {
           A a=new A();
                a.show();
        }
}
class TestDemo
{
        public static void main(String[] args)
        {
        }
}

作者: 黄晓鑫    时间: 2014-1-15 23:09
你的类前面的public去掉 就可以了 不然访问权限过大
作者: 银酱    时间: 2014-1-15 23:28
本帖最后由 银酱 于 2014-1-15 23:34 编辑
黄晓鑫 发表于 2014-1-15 23:09
你的类前面的public去掉 就可以了 不然访问权限过大

网上搜了一下好像是
java中规定文件名要与public 类的类名保持一致 原因好像很复杂,我还看不太懂。。我试了下把文件名改为A,然后javac A就通过编译了,不过肯定不能运行,因为主函数名不是

作者: 黄晓鑫    时间: 2014-1-15 23:44
嗯 好像我学习到包里面毕老师有这样讲过 又加深了知识 呵呵
作者: 不冬眠的蚂蚁    时间: 2014-1-16 00:22
  class A
{
        public void show()
        {
                System.out.println("haha");
        }
}
class B
{
        void show()
        {
           A a=new A();
                a.show();
        }
}

class C {
         public static void main(String args []){
                 B b=new B();
                 b.show();
                 }
}
文件名 必须是入口函数所在类名  
一个文件中 只能存在一个public 类 如果有 必须是入口函数类
作者: 胡焱老师    时间: 2014-1-16 01:11
其实 不写也是一种权限!!
作者: mrwise1991    时间: 2014-1-16 10:50
每一个源文件有且只能有一个public类,当一个类需要作为主类时,则用public修饰,并且其类名要和源文件的名字相同
作者: 放课后小朋友    时间: 2014-1-16 14:09
本帖最后由 放课后小朋友 于 2014-1-16 14:10 编辑

                       public          protected              default                private
同一个类中:    ok                  ok                         ok                       ok

同一个包中:    ok                  ok                         ok

子类:              ok                  ok

不同包中:        ok




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2