Class members and their "visibility"

  • Review:

      • Class member = a variable or a method defined in a class

        public class MyClass
        {
            private int x;             // Variable - class member
            public  int get() { ... }  // Method   - class member
        }
        

  • Visibility modifiers can be used to specify the visibility (= accessibility) of members

  • There are 4 visibility (= accessibility) modifiers in Java:

          public:      accessible from any class             (discussed) 
          private:     accessible from inside same class     (discussed) 
      
      
          [empty]:     accessible from inside same package   (Discuss now) 
          protected:   accessible from subclass              (Later) 

Review:   the effect of public and private visibility (access) qualifiers

public members can be accessed from outside its class
private members cannot be accessed from outside its class

DEMO: demo/10-classes/17-private/Demo.java + C1.java    (Show compile errors)

Why do programming languages provide different accessibility modifiers

  • Program code inside a class is usually written by the same programmer

  • Program code in different classes may be written by different programmers

  • A common cause for programmong errors a made by different programmer

    Example:

  • Limiting access to variables (with private) will reduce programmming errors by another programmer

Java packages

  • Some problems are too complex that they cannot be solved by methods inside one single class

  • A complex problem may need to use multiple classes


  • Background information:

    • Programs run more efficiently if they can access variables directly

      I.e.:   getter (e.g.: getRadius())) and setter (e.g.: setRadius()) will slow down a program !


  • A Package in Java is used to organize multiple classes used to solve a complex problem

  • The facilitate (= make it easier) the coorperation of multiple classes:

      • Java can allow methods in classes within the same package to access each others' members (variables and methods) directly

How to create a package in BlueJ

  • How to create a new project in BlueJ to store a package:

      Click on Project 
    
                        Name:     LearnPackage
    		    Location: C:OutSchool\CS\AP-CS\demo

     


  • Open a File Browser and go to C:OutSchool\CS\AP-CS\demo\LearnPackage to view what happens


  • To make a package p1 inside the LearnPackage project:

      Click on Edit --> New Package
    
                        Package Name: p1

    Classes in package p1 must be stored inside the folder p1

How to create a class inside a package p1 in BlueJ

  • You can open the package p1 by:

      Double click on package p1 in LearnPackage
    
    
     

    A new window for LearnPackage [p1] will pop up


  • Open a File Browser and go to C:\OutSchool\CS\AP-CS/demo\LearnPackage\p1 to view what happens


  • To make a class C1 inside the LearnPackage.p1 package:

      Click on New Class inside the LearnPackage [p1] window:
    
                        Class Name: C1

    Class C1 is stored inside the folder p1

The default access modifier

  • A member in a class has the default access if no access modifier is specified

  • Example: use BlueJ and create this class C1 inside package p1:

    package p1;   // Inserted by BlueJ !
    
    public class C1
    {
        public  int x1;
                int x2;         // Default (= package) access modifier
        private int x3;
        
        public  void m1() {}
                void m2() {}    // Default (= package) access modifier
        private void m3() {}
    }
      

  • The members variable x2 and method m2() has no access modifier

    • They will be assigned with the default access modifier

The default access modifier

  • If a member (= variable or method) does not have an access modifier:
     

    The member will receive the "default" access modifier

The default access modifier

  • A member with default access can be used/accessed by methods inside classes belonging to the same package:

    Remember:   classes in the same package coorperate to perform a complex task !

DEMO: demo/10-classes/18-package/p1/Demo.java + C1.java (use BlueJ or javac -cp ..)

The default access modifier

  • A member with default access is not accessible from methods in classes belonging to a different package:

    Remember:   classes in different packages are not part of the coorperation

DEMO: demo/10-classes/18-package/Demo.java + p1/C1.java

Summary

Members with the default access modifier can be accessed from methods in classes inside the same package: