标签: protected

Java受保护的访问不起作用

在java中,有三种访问级别:

  • 公众 - 对世界开放
  • 私人 - 仅向全班开放
  • 受保护 - 仅对类及其子类(继承)打开.

那么为什么java编译器允许这种情况发生呢?

TestBlah.java:

public class TestBlah {

    public static void main(String[] args) {
        Blah a = new Blah("Blah");
        Bloo b = new Bloo("Bloo");
        System.out.println(a.getMessage());
        System.out.println(b.getMessage()); //Works
        System.out.println(a.testing);
        System.out.println(b.testing); //Works
    }
}
Run Code Online (Sandbox Code Playgroud)

Blah.java:

public class Blah {
    protected String message;

    public Blah(String msg) {
        this.message = msg;
    }

    protected String getMessage(){
        return(this.message);
    }   
}
Run Code Online (Sandbox Code Playgroud)

Bloo.java:

public class Bloo extends Blah {
    public Bloo(String testing) {
        super(testing);
    }
}
Run Code Online (Sandbox Code Playgroud)

java inheritance visibility protected access-levels

3
推荐指数
4
解决办法
5726
查看次数

测试驱动开发:编写私有/受保护变量的测试

我正在学习TDD,我对私有/受保护变量有疑问.我的问题是:如果我想测试的函数是在私有变量上运行,我应该如何测试它?

这是我正在使用的示例:

我有一个名为的类Table包含一个名为internalRepresentation2D数组的实例变量.我想创建一个函数multiplyValuesByN,通过参数将2D数组中的所有值相乘n.

所以我为它编写测试(在Python中):

def test_multiplyValuesByN (self):  
    t = Table(3, 3) # 3x3 table, filled with 0's
    t.set(0, 0, 4) # Set value at position (0,0) to 4
    t.multiplyValuesByN(3)

    assertEqual(t.internalRepresentation, [[12, 0, 0], [0, 0, 0], [0, 0, 0]])
Run Code Online (Sandbox Code Playgroud)

现在,如果我internalRepresentation私有或受保护,此测试将无效.我怎么应该写测试所以它不依赖internalRepresentation但仍然测试它在调用后看起来是否正确multiplyValuesByN

variables tdd unit-testing private protected

3
推荐指数
1
解决办法
771
查看次数

为什么在不相关的类中可以访问受保护的方法?

我在下面用Eclipse ide编写的代码:

public interface X
{
  final public static int SOME_CONST = 0;
}
public class Handle implements X
{
  protected void methodHandle () { }
 //...
}

public class User implements X
{
  Handle handle = new Handle();
  private void methodUser ()
  {
    Y y = new Y()  // anonymous inner class
    {
      public void methodY ()
      {
        handle.methodHandle (); // <--- why this is NOT giving error ?
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

即使Handle.methodHandle ()protected,它仍然可以从匿名内部 …

java eclipse compilation protected access-specifier

3
推荐指数
1
解决办法
972
查看次数

公共与受保护

我很困惑为什么类组成publicprotected方法/变量.为什么只有扩展类才能访问protected方法/变量?别人可以能帮我开导之间的差异public,并protected和它的功能.

c# protected public

3
推荐指数
1
解决办法
1万
查看次数

与抽象类不可访问的可访问性

我有一个内部抽象类InternalClassBase和两个(也内部)类InternalClass1InternalClass2,它从继承InternalClassBase.

我也有一个公共抽象类PublicClassBase和两个(也公开)班PublicClass1PublicClass2,从继承PublicClassBase.

PublicClassBase有一个受保护的成员XXX类型InternalClassBase,这样既PublicClass1PublicClass2可以使用它.

这是我的代码:

internal abstract class InternalClassBase { }
internal class InternalClass1 : InternalClassBase { }
internal class InternalClass2 : InternalClassBase { }

public abstract class PublicClassBase
{
    protected InternalClassBase XXX;  // this is where the error happens
}
public class PublicClass1 : PublicClassBase { }
public class PublicClass2 : PublicClassBase { } …
Run Code Online (Sandbox Code Playgroud)

c# protected public access-modifiers internal

3
推荐指数
1
解决办法
2156
查看次数

Java:当java.io具有受保护的构造函数时,如何从java.io为Reader类创建新的类对象

我想为java的Reader类创建一个新的类对象,但由于它受到保护,我无法访问构造函数.

读者类描述

Reader myReader = new Reader(); 
Run Code Online (Sandbox Code Playgroud)

不管用.

通常,我会创建一个新的函数来访问该构造函数的类,但由于该函数是java默认库的一部分,我该如何访问它?谢谢你的帮助.

java constructor class protected

3
推荐指数
1
解决办法
7414
查看次数

在C++中实际使用'protected'说明符

我知道这个说明符是如何工作的.

我对实际编程中这些东西的实际使用感兴趣.我无法想象任何受保护类成员真正需要的例子(我的意思是当我们不能用'private'替换'protected'时).

c++ protected

3
推荐指数
1
解决办法
176
查看次数

如何强制实现受保护的静态函数

我正在尝试编写一个抽象类(或接口),它强制扩展类实现受保护的静态函数.但这对于抽象类和接口来说既不可能.

错误:

  • 静态函数不应该是抽象的
  • 必须省略接口成员的访问类型

任何想法如何实现?

UPDATE

目的基本上是静态调用公共函数.这样,该类不需要实例化.也没有必要从类外部代码中调用_doSpecificStuff().

abstract class Foo
{
    public static function doStuff()
    {
        [generic code] 

        static::_doSpecificStuff();
    }

    // sth like that would be nice to have:
    abstract static protected function _doSpecificStuff();
}
Run Code Online (Sandbox Code Playgroud)

php static protected abstract

3
推荐指数
1
解决办法
1551
查看次数

为什么保护范围不起作用?

我正在尝试使用Java的受保护范围.

我在package1中有一个Base类:

package package1;

 public class Base {

     protected String messageFromBase = "Hello World";

    protected void display(){
        System.out.println("Base Display");
    }

}
Run Code Online (Sandbox Code Playgroud)

我在同一个包中有一个Neighbor类:

package package1;

public class Neighbour {

    public static void main(String[] args) {
        Base b =  new Base();
        b.display();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我在另一个包中有一个子类,它从package1继承Base:

package package2;

import package1.Base;

 class Child extends Base {


    public static void main(String[] args) {
        Base base1 = new Base();
        base1.display(); // invisible
        System.out.println(" this is not getting printed" + base1.messageFromBase); // invisible

    }


}
Run Code Online (Sandbox Code Playgroud)

我的问题是该display() …

java protected

3
推荐指数
1
解决办法
97
查看次数

不可删除/不可见的.txt文件

目前我在C#中创建一个GUID键,将其放在USB闪存盘上.我用这个键进行用户识别.密钥本身位于.txt文件中,易于操作.有没有办法使.txt文件不可删除和不可见但仍然可读?

c# text invisible file protected

3
推荐指数
1
解决办法
97
查看次数