Why protected method is not accessible from subclass?

后端 未结 5 1353
我在风中等你
我在风中等你 2021-02-08 23:04

Consider the following code snippets:

package vehicle;

public abstract class AbstractVehicle {
    protected int speedFactor() {
        return 5;
    }
}

pack         


        
5条回答
  •  青春惊慌失措
    2021-02-08 23:50

    Subclasses in different package can't access protected methods and protected variables from superclass using superclass reference. Only way to access protected data of superclass in subclass is through inheritance

    below are two code snippets

    package nee;
    import parentdata.Parent;
    
    class Child extends Parent{
    
            public void testIt(){
            System.out.println(x);  // able to access protected x defined in Parent
            }
    
        }
    
    
    package nee;
    import parentdata.Parent;
    
            class Child extends Parent {
    
            public void testIt(){
            Parent p=new Parent();
            System.out.println(p.x) //  results in compile time error
            }
    
        }
    

    In language specification 6.6.2.1 Access to a protected Member

    Let C be the class in which a protected member m is declared. Access is permitted only within the body of a subclass S of C. In addition, if Id denotes an instance field or instance method, then:

    If the access is by a qualified name Q.Id, where Q is an ExpressionName, then the access is permitted if and only if the type of the expression Q is S or a subclass of S.
    If the access is by a field access expression E.Id, where E is a Primary expression, or by a method invocation expression E.Id(. . .), where E is a Primary expression, then the access is permitted if and only if the type of E is S or a subclass of S.
    

    for in depth details visit http://www.jot.fm/issues/issue_2005_10/article3.pdf

提交回复
热议问题