Q5.4 public,protected,private有什么不同?
答:这些关键字用于声明类和成员的可见性。
public成员可以被任何类访问,
protected成员限于自己和子类访问,
private成员限于自己访问。
Java还提供了第四种的默认可见性,当没有任何public,protected,private修饰时,成员
是同一包内可见。
类可以用public或默认来修饰。问题:
1》如果没有任何修饰时,成员是同一包内可见,这个同一包是哪个包呢?如果我的类没有声明在一个包内,默认包是什么?2》类可以用public和默认来修饰,如果用public不就是被任何类访问?其它包的也可以吧?(是要还要import这个包吧?)如果是默认的话也应该是这样咯?默认就是=public吧?3》除了类其它的不也可以默认也是public吗?(就是不加这个修饰)像属性或方法啊。4》为什么java中每个成员都指定一个访问权限呢?为什么不是像C++中那样用public,private,protect来说明下面的都是这个权限内的。而不是征对每个成员指定。

解决方案 »

  1.   

    1.任何类都是集成object类,objet类的可见范围就是你的类的可见范围
    2.是
    3.类内的成员默认应该是private
    4.语言特点
      

  2.   

    private,protected的class有什么用的呢?是用在继承方面吗?
    比如在C++中这样用:
    class B: public A{}
    class B: protected A{}
    java中用extends,有没有public extends, protected extends之类的用法?
    一个类作为私有或保护的用在哪些地方?对于上面的第一个问题还是不太清楚,如果没有任何修饰时,成员是同一包内可见到底是什么意思?没有任何修饰不是默认是private的吗?那同一包内怎么可见呢?应该是本类内才可访问的啊。
      

  3.   

    我们用java解决实际问题。欢迎有经验的java程序员加入我们的讨论,因人数接近上限,初级人员暂时不能加入,请谅解。QQ 群:3001581
      

  4.   

    纳闷二楼的两颗星是怎么来的。。这种回答太不敢苟同了。to楼主:1. 如果没有指定任何访问修饰符,则访问级别为Default,也就是当前包内可见。   原则上说,任何类都应该用package语句放在某个指定的包下,如果你没有这样做,那么Java会把该类所处的文件夹视为一个包(即所谓的“默认包”),这个包的范围就是当前目录(注意:并不包含子目录)。Java不推荐使用默认包。2. 类可以用public或不用任何关键字修饰,也就是说,类的访问级别有二级,public和Default。
       public级别可以为所有其它类访问,而非public类只能被当前包内的类访问。这与是否import是两码事,只要一个public类在另一个包中,就必须用import;而另一个包中的非public的类,即使你用import也不能访问。3. 任何不加访问修符符的地方,其访问级别都是Default(不是public,也不是private!切记!)4. 语言特点。
       个人认为:Java不像C++那样可以将声明和定义分开来,就是说,Java中没有像C++那样的函数声明。这使得每个函数(即方法)都必须在类中做完整定义(抽象方法除外),这种格式不适合用类似C++的类定义风格。
      

  5.   

    to Dan1980() :
    4. 语言特点。
       个人认为:Java不像C++那样可以将声明和定义分开来,就是说,Java中没有像C++那样的函数声明。这使得每个函数(即方法)都必须在类中做完整定义(抽象方法除外),这种格式不适合用类似C++的类定义风格。
    =========================
    既然没有声明和定义分开,但也可以直接定义啊。如:
    public class T
    {
       public:
         void f()
         { }
         void g()
         { }
       private:
         //直接定义。
    }
    我的意思是为什么不这样,而每个成员前都写一个,感觉有点繁琐啊。
      

  6.   

    Java中这种记法是有理由的。因为,不加访问权限修饰符的方法也是有权限级别的,即Default(包级别)。(Java用包来组织类,而不是像C++那样提供友元访问。)把public, private之类修饰符加在每个方法前面可以增加代码的可读性,减少不必要的二义性。
      

  7.   

    既然没有声明和定义分开,但也可以直接定义啊。如:
    public class T
    {
       public:
         void f()
         { }
         void g()
         { }
       private:
         //直接定义。
    }
    我的意思是为什么不这样,而每个成员前都写一个,感觉有点繁琐啊。主要是从隐藏具体实现和代码安全方面考虑的,并不繁琐.