• 深入理解Java的protected修饰符


    其实Java的protected修饰符,权限定义的很微妙,大致有以下几种:

    (1)protected控制符用于修饰方法和成员变量;

    (2)一个类的protected方法或成员变量,在包外是不能通过该类对象进行访问的,即便在该类的子类中也不可这么做;

      在该类包外的子类中能访问的只是子类自己继承来的protected 方法和属性,即可以用super来访问;

     (3)在包外的子类中,不能用另外一个子类的对象访问父类中的protected变量,尽管这两个子类继承自同一个父类;

     (4)在包内,则可以;

     (5)而对于protected的静态变量,在子类中可以直接访问,在不同包的非子类中则不可访问;

     (6)对于protected的用法,其实是遵循了OOP的一个原则,方法和成员变量被继承后,其可见的范围只能扩大,不能缩小;


    父类:Test.java

    package test1;
    
    public class Test {
    	protected String getNumber() {
    		return "test";
    	}
    }
    


    不同包的子类:ProtectedTest2.java

    package test2;
    
    import test1.Test;
    
    public class ProtectedTest2 extends Test {
    
    	public void test1() {
    		//无法访问:无法通过父类的引用来访问
    		Test test = new Test();
    		Test test1 = new ProtectedTest2();
    //		test1.getNumber();
    //		test.getNumber();
    	}
    
    	public void test2() {
    		//可以访问:可以通过继承的super来访问,或直接不用super;
    		getNumber();
    		super.getNumber();
    	}
    
    	public void test3() {
    		//可以访问:通过子类对象来访问;
    		ProtectedTest2 pTest2 = new ProtectedTest2();
    		pTest2.getNumber();
    	}
    	
    	public void test4() {
    		//无法访问:包外的子类中,不能用另一个子类的对象访问父类的protected变量,尽管这两个子类继承自同一个父类;
    		ProtectedTest3 pTest1 = new ProtectedTest3();
    //		pTest1.getNumber();
    	}
    
    }
    

    不同包的子类ProtectedTest3.java

    package test2;
    
    import test1.Test;
    
    public class ProtectedTest3 extends Test{
    	
    }
    

    同包的子类ProtectedTest1.java

    package test1;
    
    import test2.ProtectedTest3;
    
    public class ProtectedTest1 {
    
    	public static void main(String[] args) {
    		
    		Test test = new Test();
    		test.getNumber();
    		
    		//在同包中访问    和父类不在同一包的子类,可以访问;
    		ProtectedTest3 pt = new ProtectedTest3();
    		pt.getNumber();
    
    	}
    }
    



  • 相关阅读:
    素数路径Prime Path POJ3126 素数,BFS
    Fliptile POJ3279 DFS
    Find the Multiple POJ1426
    洗牌Shuffle'm Up POJ3087 模拟
    棋盘问题 POJ1321 DFS
    抓住那只牛!Catch That Cow POJ3278 BFS
    Dungeon Master POJ2251 三维BFS
    Splitting into digits CodeForce#1104A
    Ubuntu下手动安装Nvidia显卡驱动
    最大连续子序列和
  • 原文地址:https://www.cnblogs.com/xiaozhang2014/p/5297295.html
Copyright © 2020-2023  润新知