Monday, August 16, 2010

Class Access

1:
package com.sunil.scjp.puzzles;

public interface AQuestion
{
     void someMethod() throws Exception;
}

class AQuestionImpl implements AQuestion
{
    public final void someMethod()
    {
        System.out.println("someMethod");
    }

}

public class ClassB
{
    public static void main(String[] args)
    {
        System.out.println("Hello World!");

        AQuestion = new AQuestionImpl();
    }
}


Compilation:   
javac -cp . ClassB.java
ClassB.java:10: com.sunil.scjp.puzzles.AQuestionImpl is not public in com.sunil.scjp.puzzles; cannot be accessed from outside package
        AQuestion aQ = new AQuestionImpl();
                           ^
1 error

Reason: the AQuestionImpl is of default access, It can be accessed only in the same package.

__________________________________________________________________________________
 2:

package com.sunil.scjp.puzzles;

public interface AQuestion
{
     void someMethod() throws Exception;
}

class AQuestionImpl implements AQuestion
{
    public final void someMethod()
    {
        System.out.println("someMethod");
    }

}
 
package com.sunil.scjp.puzzles;


public class ClassB
{
    public static void main(String[] args)
    {
        System.out.println("Hello World!");

        AQuestion aQ = new AQuestionImpl();
    }
}


Compilation: Success
Output: Hello World!
Reason: Since the package is same, the ClassB can access AQuestionImpl

___________________________________________________________________________________
3:
package com.sunil.scjp.puzzles;

class Beverage
{
}

package com.sunil.scjp;

import com.sunil.scjp.puzzles.Beverage;

class  Tea extends Beverage
{
    public static void main(String[] args)
    {
        System.out.println("Hello World!");
    }
}

Compilation:
D:\workings\Sunil\skillsets\Java\SCJP\eclipse\SCJP\src>javac -cp . com/sunil/scjp/puzzles/Beverage.java

D:\workings\Sunil\skillsets\Java\SCJP\eclipse\SCJP\src>javac -cp . com/sunil/scjp/Tea.java
com\sunil\scjp\Tea.java:3: com.sunil.scjp.puzzles.Beverage is not public in com.sunil.scjp.puzzles; cannot be accessed from outside package
import com.sunil.scjp.puzzles.Beverage;
                             ^
com\sunil\scjp\Tea.java:5: cannot find symbol
symbol: class Beverage
class  Tea extends Beverage
                   ^
2 errors


Explanation: 
Beverage file compiles fine. 
Beverage class is in package com.sunil.scjp.puzzles and Tea is in package com.sunil.scjp. The import statement itself fails while compiling Tea.java
_________________________________________________________________________________
4:

package com.sunil.scjp.puzzles;

public class Beverage
{
}

package com.sunil.scjp;

class  Tea extends Beverage
{
    public static void main(String[] args)
    {
        System.out.println("Hello World!");
    }
}

Compilation:
D:\workings\Sunil\skillsets\Java\SCJP\eclipse\SCJP\src>javac -cp . com/sunil/scjp/puzzles/Beverage.java

D:\workings\Sunil\skillsets\Java\SCJP\eclipse\SCJP\src>javac -cp . com/sunil/scjp/Tea.java

D:\workings\Sunil\skillsets\Java\SCJP\eclipse\SCJP\src>javac -cp . com/sunil/scjp/Tea.java
com\sunil\scjp\Tea.java:4: cannot find symbol
symbol: class Beverage
class  Tea extends Beverage
                   ^
1 error

Explanation: Even-though the Beverage class is public, compilation of Tea.java fails as it does not import the Beverage class.

------------------------------------------------------------------------------------------------------------
5:
package com.sunil.scjp.puzzles;

final abstract public class PerfectlyValidClass
{
    public void someMethod()
    {
        System.out.println("");
    }
   
}
Compilation: 
D:\workings\Sunil\skillsets\Java\SCJP\eclipse\SCJP\src>javac -cp . com/sunil/scjp/puzzles/PerfectlyValidClass.java
com\sunil\scjp\puzzles\PerfectlyValidClass.java:3: illegal combination of modifiers: abstract and final
final abstract public class PerfectlyValidClass
                      ^
1 error

Explanation: You cannot mix non access modifiers while declaring a class.
--------------------------------------------------------------------------------------------------------------
6:

abstract strictfp public class PerfectlyValidClass
{
    public strictfp final String myStr = new String("Hello");

    public void someMethod()
    {
        System.out.println("");
    }
   
}


Compilation:
D:\workings\Sunil\skillsets\Java\SCJP\eclipse\SCJP\src>javac -cp . com/sunil/scjp/puzzles/PerfectlyValidClass.java
com\sunil\scjp\puzzles\PerfectlyValidClass.java:5: modifier strictfp not allowed here
    public strictfp final String myStr = new String("Hello");
                                 ^
1 error

Explanation: strictfp is only class and method modifier.

----------------------------------------------------------------------------------------
7:
abstract strictfp public class PerfectlyValidClass
{
    public final String myStr = new String("Hello");

    public strictfp void someMethod()
    {
        System.out.println("");
    }
   
}

Compilation: Success
-----------------------------------------------------------------------------------------------------------

class final ManThisIsFinal
{
    public static void main(String[] args)
    {
        System.out.println("Hello World!");
    }
}


Compilation:

com\sunil\scjp\puzzles\ManThisIsFinal.java:3: <identifier> expected
class final ManThisIsFinal
     ^
com\sunil\scjp\puzzles\ManThisIsFinal.java:3: <identifier> expected
class final ManThisIsFinal
                          ^
2 errors

Explanation: accessor should be followed by an identifier while defining class or variable
--------------------------------------------------------------------------------------------------------

No comments:

Post a Comment