`
xo_tobacoo
  • 浏览: 395142 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

protected访问权限

    博客分类:
  • java
阅读更多

1、protected的类、类属变量及方法,包内的任何类,及包外的那些继承了此类的子类才能访问;

注意:子类如处于不同的包,则相互间不能访问继承自父类的方法。

所有不能访问的方法都已经被注释:

package packageA;

public class Base {
    public String publicStr = "publicString";
    protected String protectedStr = "protectedString";
    String defaultStr = "defaultString";
    private String privateStr = "privateString";

    public void print() {
        System.out.println("packageA.Base has access to");
        System.out.println("    " + publicStr);
        System.out.println("    " + protectedStr);
        System.out.println("    " + defaultStr);
        System.out.println("    " + privateStr);

        Base b = new Base(); // -- other Base instance
        System.out.println("    b." + b.publicStr);
        System.out.println("    b." + b.protectedStr);
        System.out.println("    b." + b.defaultStr);
        System.out.println("    b." + b.privateStr);
    }
}

--------------------------------------------------------------------------------

package packageA;

public class SubA extends Base {
    public void print() {
        System.out.println("packageA.SubA has access to");
        System.out.println("    " + publicStr + " (inherited from Base)");
        System.out.println("    " + protectedStr + " (inherited from Base)");
        System.out.println("    " + defaultStr + " (inherited from Base)");
        // -- not accessible - private elements are even not inherited
        // System.out.println(privateStr);

        Base b = new Base(); // -- other Base instance
        System.out.println("    b." + b.publicStr);
        System.out.println("    b." + b.protectedStr);
        System.out.println("    b." + b.defaultStr);
        // -- not accessible
        // System.out.println(b.privateStr);
    }
}

--------------------------------------------------------------------------------

package packageA;

public class AnotherA {
    public void print() {
        System.out.println("packageA.AnotherA has access to");
        Base b = new Base();
        System.out.println("    b." + b.publicStr);
        System.out.println("    b." + b.protectedStr);
        System.out.println("    b." + b.defaultStr);
        // System.out.println(b.privateStr);
    }
}

--------------------------------------------------------------------------------

package packageB;
import packageA.Base;

public class SubB extends Base {
    public void print() {
        System.out.println("packageB.SubB has access to");
        System.out.println("    " + publicStr + " (inherited from Base)");
        // -- protectedStr is inherited element -> accessible
        System.out.println("    " + protectedStr + " (inherited from Base)");
        // -- not accessible
        // System.out.println(defaultStr);
        // System.out.println(privateStr);

        Base b = new Base(); // -- other Base instance
        System.out.println("    b." + b.publicStr);
        // -- protected element, which belongs to other object -> not accessible
        // System.out.println(b.protectedStr);

        // -- not accessible
        // System.out.println(b.defaultStr);
        // System.out.println(b.privateStr);
    }
}

--------------------------------------------------------------------------------

package packageB;
import packageA.Base;

public class AnotherB {
    public void print() {
        System.out.println("packageB.AnotherB has access to");
        Base b = new Base();
        System.out.println("    b." + b.publicStr);
        // -- not accessible
        // System.out.println(b.protectedStr);
        // System.out.println(b.defaultStr);
        // System.out.println(b.privateStr);
    }
}

--------------------------------------------------------------------------------

import packageA.*;
import packageB.*;

// -- testing class
public class TestProtection {
    public static void main(String[] args) {
        // -- all classes are public, so class TestProtection
        // -- has access to all of them
        new Base().print();
        new SubA().print();
        new AnotherA().print();
        new SubB().print();
        new AnotherB().print();
    }
}

 

分享到:
评论

相关推荐

    java中protected的权限

    `protected`是Java中四种访问权限之一,它在类的封装和继承中扮演着重要的角色。本篇文章将深入探讨`protected`关键字的含义、用法以及它在实际开发中的应用。 1. `protected`的含义: `protected`是一种中级访问...

    java四种访问权限实例分析

    Java 中一共有四种访问权限控制,其权限控制的大小情况是这样的:public > protected > default(包访问权限)> private。 1. public 访问权限:所修饰的类、变量、方法,在内外包均具有访问权限。 public 权限是...

    Swift中的访问控制和protected

    然而,Swift没有`protected`级别的原因在于,设计者认为这会导致访问控制和继承的混淆,使得权限控制过于复杂。 在一些语言中,`protected`成员允许子类访问,但不允许非子类的外部代码访问。然而,Swift的设计者...

    Java访问权限控制源代码.zip

    如果一个类或变量没有明确声明为public、protected或private,那么它就是默认访问权限。 3. **保护(Protected)**:保护访问权限允许子类和同包内的类访问。这意味着即使在不同的包中,如果一个类是另一个类的子类...

    Java访问权限原理与用法详解

    "Java 访问权限原理与用法详解" Java 访问权限原理与用法详解是 Java 编程语言中非常重要的一个概念,它控制着类、方法和变量的访问权限,确保了程序的安全性和封装性。在本文中,我们将详细介绍 Java 访问权限的...

    举例详解Java中的访问权限修饰符

    Java提供了五种访问权限级别,分别是public、friendly(或称为default)、private和protected。下面将详细解释这些访问权限的含义和使用场景。 1. **public**: - 成员(方法、变量):任何类在任何地方都能访问。...

Global site tag (gtag.js) - Google Analytics