这是受保护方法的文档:
/** Converts jmusic score data into a MIDI Sequence */
protected javax.sound.midi.Sequence scoreToSeq(Score score)
Run Code Online (Sandbox Code Playgroud)
我创建了这个小类来扩展scoreToSeq方法来自的类:
public class MidiSequence extends MidiSynth{
public Sequence getSequence(Score score){
MidiSynth synth = new MidiSynth();
Sequence sequence = null;
try
{
// Here I get the error saying that the method has
// protected access in MidiSynth
sequence = synth.scoreToSeq(score);
}
catch (InvalidMidiDataException e)
{
/*
* In case of an exception, we dump the exception
* including the stack trace to the console.
* …Run Code Online (Sandbox Code Playgroud) 如果我有一个类我想要的方法protected和internal.我希望只有程序集中的派生类才能调用它.
由于protected internal手段protected 或者 internal,你必须做出选择.在这种情况下你选择什么 - protected或者internal?
在Scala中,如果我创建了一个对象和伴随类,protected如果导入了对象,则可以从类中访问使用修饰符声明的标识符:
object Foo {
protected val X = 42
}
class Foo {
import Foo._
def getX(): Int = X
}
Run Code Online (Sandbox Code Playgroud)
但是,protected无法从类Foo的子类访问标识符:
class Bar extends Foo {
import Foo._
def getX(): Int = X * 2
}
Run Code Online (Sandbox Code Playgroud)
我得到一个编译时错误Bar.
其他(隐含的)public,是否有任何访问修饰符,我可以X从它的伴侣的子类访问它,但不能从其他类,包括同一个包中的其他类访问?
我刚刚开始使用David Powers 的面向PHP面向对象解决方案的OOP PHP ,并且对OOP中的保护概念有点好奇.
作者清楚地解释了保护是如何起作用的,但是关于不希望其他人能够改变属性的一点点有点平淡.我很难想象有可能阻止其他人改变你的课程,因为他们可以打开你的class.php手动调整任何他们喜欢看到的PHP如何总是用纯文本.
注意:以上所有内容均由初学者编写,初学者对编程有所了解.
我想打印一个受密码保护的PDF,所以一开始,我试图将这个PDF转换成NSData并传递给它UIPrintInteractionController.
但根据Google搜索结果,您无法将PDF解锁为NSData结构.唯一的解决方案是将受密码保护的PDF保存为非密码保护的PDF,然后打印出来.
我在互联网上搜索了半天,但我仍然找不到如何做到这一点.
我知道CGPDFDocumentUnlockWithPassword,但这是为了即时观看,不会给我任何我可以打印的东西.
可能重复:
如何使数据成员只能访问类和子类
在java中,
可以从类,它的子类以及同一个包中存在的所有类中访问受保护的成员,
但是我希望只能从类及其子类访问成员(就像c ++中的受保护成员一样).
例如:::
class A
{
protected void fun()
{
System.out.println("Hello");
}
}
class B
{
public static void main(String args[])
{
A a = new A();
a.fun();
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,A的fun()可以被B访问,即使B不是A的子类.
如何使A不能进入所有不属于A的子类的类?
编辑::我想在java中实现这一点.
我有一个接口和一个在同一个程序集中定义的抽象基类:
IFoo.cs:
internal interface IFoo { ... }
Run Code Online (Sandbox Code Playgroud)
Base.cs:
public abstract class Base
{
internal protected Base(IFoo foo) { ... }
}
Run Code Online (Sandbox Code Playgroud)
这会生成以下编译器错误:
CS0051: Inconsistent accessibility: parameter type 'IFoo' is less
accessible than method 'Base.Base(IFoo)'
Run Code Online (Sandbox Code Playgroud)
如果我将Base类构造函数设置为仅内部,则错误消失.由于该类是抽象的,可能在可访问性中添加受保护并不能完成任何事情......
不过,我不明白这个错误.MSDN将'protected internal'定义为
"访问仅限于当前程序集或从包含类派生的类型"
内部接口IFoo如何比内部受保护的构造函数更难访问?
我正在通过"Scala for the Impatient"一书中的练习来学习Scala.一项练习要求:
Stack.scala文件包含定义
class Stack[+A] protected (protected val elems: List[A])解释
protected关键字的含义.
有人能帮助我理解这个吗?protected显然对成员变量有意义,但它在类定义中有什么含义?
我有这种情况:有一个Java类
public class A {
public void overrideMe(B param){
//TODO: override me in Kotlin!
}
protected static class B {
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个Kotlin类,它继承自它并且必须覆盖方法"overrideMe"
class K: A() {
override fun overrideMe(param: B) {
println("Wow!")
}
}
Run Code Online (Sandbox Code Playgroud)
但Kotlin不允许这种行为.
'public'函数公开其'protected(in A)'参数类型B.
有什么方法可以解决这个问题吗?
PS这不仅仅是一个合成案例 - 当我尝试实现自定义Spring AmqpAppender并覆盖它的postProcessMessageBeforeSend方法时,我遇到了这个问题.
简化的情况
public class A {
protected A() { }
protected A Make() { return new A(); }
}
public class B : A {
A a = new A(); //inaccessible due to protection level
B b = new B();
private B()
{
A c = new A();//inaccessible due to protection level
a = new A(); //inaccessible due to protection level
a = Make();
}
}
Run Code Online (Sandbox Code Playgroud)
为什么使用A类保护的构造函数在B类中创建A的实例是不可能的?
在我看来,受保护的构造函数就像受保护的方法,因此应该可以在子类中运行它.
protected ×10
c# ×3
inheritance ×3
java ×3
internal ×2
scala ×2
c++ ×1
class ×1
constructor ×1
covariance ×1
field ×1
generics ×1
kotlin ×1
objective-c ×1
oop ×1
pdf ×1
php ×1