Java核心(二):四种权限修饰符的区别、private是否能够修饰class

  一、public、protected、default、private四种权限修饰符的区别
  public:具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。
  protected:主要的作用就是用来保护子类的。它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西
  default:有时候也称为friendly,它是针对本包访问而设计的,任何处于本包下的类、接口、异常等,都可以相互访问,即使是父类没有用protected修饰的成员也可以。
  private:访问权限仅限于类的内部,是一种封装的体现,例如,大多数成员变量都是修饰符为private的,它们不希望被其他任何外部的类访问。
  注意:java的访问控制是停留在编译层的,也就是它不会在.class文件中留下任何的痕迹,只在编译的时候进行访问控制的检查。其实,通过反射的手段,是可以访问任何包下任何类中的成员,例如,访问类的私有成员也是可能的。
  • public:可以被所有其他类所访问
  • protected:自身、子类及同一个包中类均可以访问
  • default:同一包中的类可以访问,声明时没有加修饰符,认为是friendly
  • private:只能被自己访问和修改

 

二、Java的外部类为什么不能使用private、protected进行修饰

   对于顶级类(外部类)来说,只有两种修饰符:public和默认(default)。因为外部类的上一单元是包,所以外部类只有两个作用域:同包,任何位置。因此,只需要两种控制权限:包控制权限和公开访问权限,也就对应两种控制修饰符:public和默认(default)。
  为什么是这种情况呢?可以想一下,一个java项目是不可能在一个class里面完成的。mvc模式中,是把类分为三层,一层层调用类。如果定义为私有的和受保护的就无法调用。换句话说,对于一个java文件,要么就是自己单独运行,要么就是被其他程序作为库调用,如果一个java文件的类被private修饰,那么是不是其他的程序或是类是无法使用它的,那么他作为一个单独的文件就没啥用了。如果它作为单个文件运行,类加载怎么找到它呢,因为它对外不可见。同时,也失去了类的存在意义。因此,类只有public和默认修饰符。
  如果类使用了private修饰符,说明是个内部类。内部类的上一级是外部类,那么对应的有四种访问控制修饰符:本类(private),同包(default),父子类(protected),任何位置(public)。当一个内部类使用了private修饰后,只能在该类的外部类内部使用。
 
三、private能否修饰class?
  private只能修饰内部类。
//外部类
public
class OuterClass { //内部类 private static class InnerClass { public static void doSomething() { System.out.println(“我是内部类的方法。"); } public static void main(String args[]){ System.out.println("我是内部类的主方法main()"); } } //外部类主方法 public static void main(String[] args) {
          //在外部类中调用内部类的方法 InnerClass.doSomething(); } }
public class OutClass {
    /**
     * 内部类
     */
    private class InnerClass{
        public void doSomething(){
            System.out.println("我是内部类的doSomething()方法");
        }

    }

    public void todo(){
        System.out.println("我是外部类的todo()方法,调用内部类的doSomething()方法-----");
        new InnerClass().doSomething();
    }
}

class Test{

    public static void main(String[] args) {
        new OutClass().todo();
    }
}
本博客部分内容转载自CSDN
作者:yangyongUestc  
原文:https://blog.csdn.net/yangyong0717/article/details/78379760

 

 

 

 
posted @ 2019-02-21 16:42  荆小六  阅读(8038)  评论(0编辑  收藏  举报