zoukankan      html  css  js  c++  java
  • java中四种访问修饰符

    Java中的四种访问修饰符:public、protected、default(无修饰符,默认)、private。

    • 四种修饰符可修饰的成分(类、方法、成员变量)
      public protected default private

    ×

    ×(内部类可以用private修饰)
    方法

    成员变量

    • 四种修饰符的访问权限

    public:对所有类可见

    protected:对同一包中的类可见、对同一包及不同包中的子类可见

    default:对同一包中的类可见、对同一包中的子类可见

    private:仅对类本身可见   

    可见是可访问的意思,即由这些修饰符修饰的成分(类、方法、成员变量)可以被其它类访问。对子类可见即子类可以继承。

    这里需要注意的是protected与default,二者的区别在于不同包中的子类是否可以继承。

    访问权限 同一包 同一包中的子类 不同包中的子类 不同包
    public

    protected

    ×
    default

    × ×
    private

    × × × ×
    • 例如

    package1:ParentClass、ChildClassOne、TestOne

    package2:ChildClassTwo、TestTwo

    package3:TestThree

    其中ParentClass为

    public class ParentClass {
    
    	public int a=2;
    	protected int b = 3;
    	int c = 4;
    	private int d = 5;
    
    }
    

      1.对于TestOne来说,ParentClass类、a、b、c均可见,d不可见。即在TestOne中可以new一个ParentClass对象,且该对象中的a,b,c变量可操作。如下:

    public class TestOne {
    
    	public static void main(String args[]) {
    
    		ParentClass obj = new ParentClass();
    
    		System.out.println(obj.a);
    		System.out.println(obj.b);
    		System.out.println(obj.c);
    //		System.out.println(obj.d);     //d 不可见
    	}
    }
    

      2. ChildClassOne继承ParentClass且与其在同一个包中,则a、b、c均可见,d不可见。

    public class ChildClassOne extends ParentClass{
    
    	public static void main(String args[]) {
    
    		ChildClassOne obj = new ChildClassOne();
    
    		System.out.println(obj.a);
    		System.out.println(obj.b);
    		System.out.println(obj.c);
    //		System.out.println(obj.d);      // d不可见
    	}
    }
    

      3ChildClassTwo继承ParentClass,则a、b均可见,d不可见,由于子类与ParentClass不在同一包中,故c(default类型)不可见。

    public class ChildClassTwo extends ParentClass{
    
    	public static void main(String args[]) {
    		ChildClassTwo obj = new ChildClassTwo();
    
    		System.out.println(obj.a);
    		System.out.println(obj.b);
    //		System.out.println(obj.c);    // c不可见
    //		System.out.println(obj.d);    // d不可见
    	}
    }
    

     4.对于TestTwo来说,ParentClass类、a均可见,b、c、d不可见。由于TestTwo与ParentClass不在同一个包中,故只有public修饰的成分可见。

    public class TestTwo {
    
    	public static void main(String args[]) {
    
    		ParentClass obj = new ParentClass();
    		System.out.println(obj.a);
    //		System.out.println(obj.b);     // b 不可见
    //		System.out.println(obj.c);     // c 不可见
    //		System.out.println(obj.d);     // d 不可见
    	}
    }
    

     

    • 另外值得注意的是继承父类的子类与其他类之间的可见性,取决于其他类与父类之间的可见性。

    对于TestOne来说,ChildClassOne中a,b,c都可见,d不可见,这是由于TestOne与ParentClass在同一个包中。

    而对于TestThree来说,ChildClassOne中只有a可见,这是由于TestThree与ParentClass在不同的包中。

    需要注意:

    虽然a、b对ChildClassTwo可见,TestTwo与ChildClassTwo在同一包中,

    但对于TestTwo来说,ChildClassTwo中只有a可见,这是由于TestTwo与ParentClass在不同的包中,只有public修饰的可见。

  • 相关阅读:
    C# Andriod AES 加密算法
    微软企业库的 注入和依赖&nbs…
    锐捷交换机RG-3760-24 的简单配置与VLAN搭建
    TCP-IP and Advanced Topics 课程总结与报告
    Network Security Threats
    Multicast Routing
    OpenFlow, SDN, and NFV
    Mobile IP
    数据结构:树的来源与定义
    TCP Congestion Control
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/7123661.html
Copyright © 2011-2022 走看看