zoukankan      html  css  js  c++  java
  • Java基础--访问权限控制符

    今天我们来探讨一下访问权限控制符。

    使用场景一:攻城狮A编写了ClassA,但是他不想所有的攻城狮都可以使用该类,应该怎么办?

    使用场景二:攻城狮A编写了ClassA,里面有func1方法和func2方法,但是他只想提供func1给别的攻城狮使用,应该怎么办?

    此时,应该使用Java当中的访问权限控制符:1、默认访问权限 2、public 3、private 4、protected

    注意,上述四种访问权限,只有默认访问权限和public能够用来修饰类。修饰类的变量和方法四种权限都可以。(本处所说的类针对的是外部类,不包括内部类)

    1、修饰类

    默认访问权限:表示在同一包中其他类都可以访问该类。

    public:表示任何一个类都可以访问该类。

    例子1:

    People.java

    package test1;
    
    class People {
    //默认访问控制符
        String name;
        public People(String name) {
            this.name = name;
        }
        
        public String getName(){
            return this.name;
        }
    }

    Main.java

    package test1;
    
    public class Main {
    
        public static void main(String[] args) {
            People p = new People("攻城狮");
            System.out.println(p.getName());
        }
    
    }

    实验结果:

    可以正常输出结果[攻城狮]。因为People类使用的是默认访问修饰符,在同一个包里面可以访问,而Main.java与People.java在同一包,所以能访问。

     例子2:

    修改Main.java:把Main类放置在别的包中,会有什么情况出现呢?

    line2提示:People类不可见,即找不到的意思。People.java使用默认访问修饰符,只能提供给同包的类来访问,而现在Main.java放在了test2包中,而People.java是test1包的,所以在不同包是不能放到默认访问修饰符类的。

    2、修饰类的方法和变量

    默认访问权限(包访问权限):如果类的变量和方法使用默认访问权限,就意味着只能在同包的类中可以访问到类的方法和变量,而不同包的类则不能访问类的方法和变量。

    private:如果一个类的方法和变量使用privagte来修饰,则只能提供给本类访问,其他类不能访问。

    protected:如果一个类的方法和变量使用protected来修饰,既能提供本类访问,又能提供给不同包继承于此类的类访问方法和变量。

    public:如果一个类的方法和变量使用public来修饰,则任意类能访问方法和变量。

    下面通过一下例子来说明问题:

    例子3:

    People.java与Main.java位于同类

    People.java

    package test1;
    
    class People {
    //默认访问控制符
        String name;
        public People(String name) {
            this.name = name;
        }
        
        String getName(){
        //默认访问控制符
            return this.name;
        }
    }

    Main.java

    package test1;
    
    public class Main {
    
        public static void main(String[] args) {
            People p = new People("攻城狮");
            System.out.println(p.getName());
        }
    
    }

    此例子能正常运行,主要想测试一下默认修饰符修饰getName(),在同包的类中能正常访问。

    如果此时,把Main.java放于不同的包中,查看能否正常运行?

    People.java

    package test1;
    
    class People {
    //默认访问控制符
        String name;
        public People(String name) {
            this.name = name;
        }
        
        String getName(){
        //默认访问控制符
            return this.name;
        }
    }

    Main.java

    提示,在不同包中,是查看不了使用默认访问控制符修饰的方法。

    例子4:

    People.java

    package test1;
    
    public class People {
        String name;
        public People(String name) {
            this.name = name;
        }
        
        protected String getName(){
        //protected控制符
            return this.name;
        }
    }

    Main.java

    提示,在不同包中,是查看不了使protected控制符修饰的方法。

    编写一个Man类继承于People类

    Man.java

    package test2;
    
    import test1.People;
    
    public class Man extends People {
    
        public Man(String name) {
            super(name);
        }
        
        public void printName(){
            System.out.println(this.getName());
        }
    
    }

    Main.java

    package test2;
    import test1.People;
    
    public class Main {
    
        public static void main(String[] args) {
            //People p = new People("攻城狮");
            //System.out.println(p.getName());
            
            Man m = new Man("工程湿");
            m.printName();
        }
    
    }

    Man类继承于People类,则Man类中可以访问到People类中protected修饰的方法。

  • 相关阅读:
    JDE函数--获取当前登录人的描述
    JDE报表开发笔记(R5537011 收货校验统计表)
    JDE函数--GetUDC(B函数)
    JDE隐藏Constant等(Hide Object)
    Oracle “dba_tables”介绍
    word2013设置页面边框
    makefile--#的不正确使用
    CICS定时
    程序的命名
    UE上传到FTP,会多出些字符
  • 原文地址:https://www.cnblogs.com/xuyuanjia/p/5574801.html
Copyright © 2011-2022 走看看