java 访问权限控制

下方代码位于initialization包内

package initialization;

class Art {
      Art() { System.out.println("Art constructor"); }
      public static void Art(Object obj){
          System.out.println(obj);
      }
     void bite(){
          System.out.println("bite");
      }
}

    class Drawing extends Art {
      Drawing() { System.out.println("Drawing constructor"); }
    }

    public class Cartoon extends Drawing {
//    public Cartoon() { System.out.println("Cartoon constructor"); }
      public static void main(String[] args) {
        Cartoon x = new Cartoon();
      }
    }

下方代码位于holding包内,若不导入initialization包,则需将绝对路径写出

package holding;
import java.util.*;

public class lterator{ 
    public static void main(String[] args) {
        initialization.Cartoon MSS=new initialization.Cartoon();
      }
}

(1)若导入initialization包,则可以写成如下形式:

package holding;
import java.util.*;
//import initialization.*;这种形式也可以,表示导入initialization目录下的文件,若initialization目录下有多个文件需要导入,则可以这样表示。 
import initialization.Cartoon;
public class lterator{ 
    public static void main(String[] args) {
       // initialization.Cartoon MSS=new initialization.Cartoon();
       Cartoon mss=new Cartoon();
       mms.bite();
      }
}

private

(2)下面展示了private的功能,除了包含该成员的类之外,其它任何类都无法访问这个成员





class Sundae{
    private Sundae(){
        System.out.println("创建对象成功");
    }
    static Sundae makeSundae(){
        return new Sundae();
    }
    void bite(){
        System.out.println("bite");
    }
}
public class IceCream {

    public static void main(String[] args) {
        //Sundae x=new Sundae(); //会报错,因为该构造器是private
        Sundae x=Sundae.makeSundae();
        x.bite();
    }

}

不同

在(1)中mms.bite()会报错,因为其不在一个包内,需要在bite()前加访问权限public
在(2)中x.bite()不会报错,并且在同一个包类的其它类访问该方法都可以,因为它们拥有包访问权限

protected

在Cookie类中,由于faker前面有protected,在其它包中若想访问,则必须继承(或者将protected改为public,但是这样就会有很多类可以访问),否则会报错

package Access;

public class Cookie {
    public Cookie(){
        System.out.println("Cookie constructor");
    }
    protected void faker(){
        System.out.println("faker");
    }
}


----------
package initialization;
import Access.Cookie;
public class Chocolate extends Cookie {
    public Chocolate(){
        System.out.println("Chocolate");
    }
    public void chomp(){
        faker();
    }
    public static void main(String[] args) {
        Chocolate x=new Chocolate();
        x.chomp();
    }

}

类的访问权限

1)每个文件都只能有一个public,表示每个编译单元都有单一的公共接口,用public表现。
2)public类的名称必须完全与含有该编译单元文件名相匹配

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值