标签: protected

如何保护java.lang.Object的受保护方法不受子类的影响?

该关键字protected授予对同一包和子类中的类的访问权限(http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html).

现在,每个类都有java.lang.Object超类(http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html).

因此,我得出结论,每个班级都可以访问其java.lang.Object方法,即使它们是protected.

看一下下面的例子:

public class Testclass {
  public Object getOne() throws CloneNotSupportedException {
    return this.clone();
  }
  public Object getTwo() throws CloneNotSupportedException {
    return ((Object) this).clone();
  }
}

虽然getOne()编译很好,但getTwo()给出了

Testclass.java:6: clone() has protected access in java.lang.Object
        return ((Object) this).clone();

我既不明白为什么getTwo()不编译也不知道有什么区别(关于java.lang.Objects成员的访问)getOne().

java protected object

12
推荐指数
2
解决办法
2万
查看次数

受保护的静态成员变量

我最近一直在研究一些类文件,我注意到成员变量已经设置为受保护的静态模式,如protected static $ _someVar,并且像static :: $ _ someVar一样访问.

我理解可见性的概念,并且将某些东西设置为受保护的静态将确保成员变量只能在超类或派生类中访问,但是我是否只能在静态方法中访问受保护的静态变量?

谢谢

php static protected static-members

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

C++中的公共和私有继承

正如我们从文献中了解到的公共继承一样,子类(子类)的对象也可以被视为基类(超类)的对象.为什么当继承受到保护或私有时,子类的对象不能被视为超类的对象?

c++ inheritance private protected

12
推荐指数
5
解决办法
2万
查看次数

使用PHPUnit测试受保护方法的最佳实践(在抽象类上)

使用PHPUnit和PHP> = 5.3,可以测试受保护的方法.stackoverflow的以下页面概述了它的最佳实践:

"使用PHPUnit测试受保护方法的最佳实践"

protected static function callProtectedMethod($name, $classname, $params) {
  $class = new ReflectionClass($classname);
  $method = $class->getMethod($name);
  $method->setAccessible(true);
  $obj = new $classname($params);
  return $method->invokeArgs($obj, $params);
}
Run Code Online (Sandbox Code Playgroud)

使用PHPUnit可以轻松地在抽象类上测试公共方法.使用上述方法可以轻松地测试正常类上的受保护方法.要测试抽象类上的受保护方法必须以某种方式...

我知道PHPUnit派生抽象类并在具体类中"实现"抽象方法并针对该具体类触发测试 - 但我不知道如何将其集成到上面的方法中以获得callProtectedMethodOnAbstractClasses().

你是怎么做这样的测试的?

PS:问题不在于测试受保护方法的真相(参见:白色,灰色和黑盒测试).测试受保护方法的需要取决于您的测试策略.

php methods phpunit protected abstract

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

C++为什么要使用公共,私有或受保护的继承?

那么有关于这个主题的足够信息.例如,这个线程对我来说非常清楚:私有,公共和受保护的继承之间的区别

除了一点; 为什么有用?

c++ inheritance private protected public

12
推荐指数
1
解决办法
9938
查看次数

Ruby保护可见性从超类调用

我有这个小代码似乎在某种程度上与Ruby的文档相矛盾:

第二个可见性是protected.当调用受保护的方法时,发送方必须是接收方的子类,或者接收方必须是发送方的子类.否则NoMethodError将提出一个.

class Test
  def publico(otro)
    otro.prot
  end  
end

class Hija < Test
  protected def prot; end
end

Test.new.publico(Hija.new)
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

NoMethodError:为#publico调用的受保护方法`prot'

我错过了什么?显然,选项"接收者必须是发送者的子类"是不可用的.

ruby protected nomethoderror

12
推荐指数
1
解决办法
174
查看次数

受保护和受保护之间的区别[本]

我有以下代码:

class Base{
    protected val alpha ="Alpha";
    protected def sayHello = "Hello";
}
class Derived extends Base{
        val base = new Base;
        def hello = println(this.alpha +" "+this.sayHello) ;
       // def hello = println(base.alpha +" "+base.sayHello) ; // don't compile
    }

    object MyObj extends App{
            val x=new Derived;
            x.hello;
        }
Run Code Online (Sandbox Code Playgroud)

在课堂上Base,如果我的标签protectedthis,代码工作正常; 如果我不标记它this,一切都按预期工作.

protectedprotected[this]相当于Scala呢?如果是,为什么Scala会同时提供?如果没有,它们有何不同?

scala protected this

12
推荐指数
1
解决办法
2607
查看次数

C++:从类及其受保护的成员类型继承是否可以?

以下代码符合C++标准吗?

struct B
{
protected:
    struct Type {};
};

struct D : B, B::Type
{};

int main()
{
    D d;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在Compiler Explorer上试了一下.MSVC(VS 2017 RTW)接受它.gcc(7.3)和clang(6.0.0)拒绝它.

c++ inheritance protected multiple-inheritance

12
推荐指数
1
解决办法
408
查看次数

从C++中的测试代码访问受保护的成员函数

我一直在努力思考从C++中的一些测试代码访问受保护成员函数的最佳方法,这是我的问题:

//in Foo.h 
Class Foo
{
protected:
    void DoSomething(Data data);
}

//in Blah.h
Class Blah
{
public:
    Foo foo;
    Data data; 
};

//in test code...
Blah blah;
blah.foo.DoSomething(blah.data); // Here's my problem!
Run Code Online (Sandbox Code Playgroud)

到目前为止一些可能的解

  • 使测试代码类成为Foo的朋友,但这会使测试代码污染Foo
  • 使DoSomething成为公共功能
  • 我已经看过为这个帖子建议为Foo创建一个测试包装器,但是这不会起作用,因为Blah包含了Foo的实例.

    欢迎所有建议/见解/意见!

    谢谢

  • c++ testing protected

    11
    推荐指数
    3
    解决办法
    8492
    查看次数

    C#访问派生类中的受保护成员

    我写了以下代码:

    public class A                             
    {
        protected string Howdy = "Howdy!";     
    }
    
    public class B : A                           
    {
        public void CallHowdy()
        {
            A a = new A();
            Console.WriteLine(a.Howdy);
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    现在,在VS2010其中导致以下编译错误:

    无法通过"A"类型的限定符访问受保护的成员"Aa"; 限定符必须是'B'类型(或从中派生).

    这对我来说似乎很不合逻辑 - 为什么我不能protected从类的方法访问类实例的字段,这是从它派生的?

    那么,为什么会这样呢?


    找到了严格的答案 - http://blogs.msdn.com/b/ericlippert/archive/2005/11/09/491031.aspx

    c# encapsulation protected derived-class visual-studio-2010

    11
    推荐指数
    1
    解决办法
    6999
    查看次数