/**
 * This is a do-nothing program. The only purpose is to demonstrate
 * how to access variables and methods in one class from another class.
 */
 class MainClass {
    // instance variables
    public String publicString = "Public instance string in MainClass";
    String packageString = "Package instance string in MainClass";
    private String privateString = "Private instance string in MainClass";
    // class variables
    public static String publicStaticString = "Public static string in MainClass";
    static String packageStaticString = "Package static string in MainClass";
    private static String privateStaticString = "Private static string in MainClass";
    
    // class method (no instance needed)
    public static void println(String s) {
        System.out.println("    " + s);
    }
    
    // instance method (can only be used by an instance of MainClass)
    public void printMessage(String s) {
        System.out.println("    " + s + this + ".");
    }
    
    public static void main(String args[]) {
        System.out.println("---------- In MainClass:");
        
        println(publicStaticString);   // legal--only needs the class
        println(packageStaticString);  // legal--only needs the class
        println(privateStaticString);  // legal--only needs the class
        
//         println(publicString);     // illegal--does not send to an object
//         println(packageString);    // illegal--does not send to an object
//         println(privateString);    // illegal--does not send to an object
        
        MainClass main = new MainClass();  // construct a MainClass object
        println(main.publicString);   // legal--sends a message to object main
        println(main.packageString);  // legal--sends a message to object main
        println(main. privateString); // legal--sends a message to object main
        
//        printMessage("No object in sight");  // illegal--not sent to instance
        main.printMessage("This message brought to you by object "); //legal
        
        Subclass sc = new Subclass();
        sc.doSomething();
        UnrelatedClass uc = new UnrelatedClass();
        uc.doSomething();
    }

}
        
