public class UnrelatedClass {

    void myPrint(String s) {
        MainClass.println(s);
    }

    void doSomething() {
        System.out.println("---------- In UnrelatedClass:");
        
//        println("hello");  // illegal--defined in MainClass, not here
        
//        myPrint(publicStaticString);   // illegal--in unrelated MainClass
//        myPrint(packageStaticString);  // illegal--in unrelated MainClass
//        myPrint(privateStaticString);  // illegal--in unrelated MainClass
        
//        myPrint(publicString);     // illegal--does not send to an object
//        myPrint(packageString);    // illegal--does not send to an object
//        myPrint(privateString);    // illegal--does not send to an object
        
        MainClass main = new MainClass(); // construct a MainClass object
        myPrint(main.publicString);       // legal--main has a publicString
        myPrint(main.packageString);      // legal--main has a packageString
//        myPrint(main. privateString);   // illegal--main has it but hides it
        
        Subclass sub = new Subclass(); // construct a MainClass object
        myPrint(sub.publicString);     // legal--sends a message to object sub
        myPrint(sub.packageString);    // legal--sends a message to object sub
//        myPrint(main. privateString);  // illegal--private in MainClass

//        printMessage("No object in sight");  // illegal--not sent to instance
        main.printMessage("This message brought to you by object "); // legal
        myPrint("This message brought to you by object " + this);
    }
}

