在Java中,我们有一些修饰符:protected,public,private.在UML中,它们是#,+,-,分别.
我的问题是,~符号在UML中意味着什么?它在Java,C++中有什么意义吗?
我有这个类 testC 用于谷歌测试
class testC : public A { };
Run Code Online (Sandbox Code Playgroud)
然后是同一文件中的一堆测试。
TEST(test_case_name, test_name) {
... test body ...
}
Run Code Online (Sandbox Code Playgroud)
A的结构是这样的
class A{
protected:
B b;
public:
//constructors
//destructor
//member functions
Run Code Online (Sandbox Code Playgroud)
问:如何通过访问b所有功能?TEST(){}testC
我尝试做一个吸气剂testC
public:
testC getTest(){
testC test;
return test;
}
Run Code Online (Sandbox Code Playgroud)
我也尝试返回参考,但没有运气......
所以我的讲师说了一句话:
将变量声明为protected会将它们暴露给所有子类,可能会导致维护问题,最好将变量声明为私有(即使在继承关系中),并编写getter和setter方法以提供对变量的访问.
但他没有解释维修问题是什么.如果子类可以访问变量,那么会出现什么问题.
我对java很新,所以简单的解释会更有帮助
Protected member is supposed to be accessible from derived class. Then, why I got the compiling error in the code below?
class A {
protected:
A() {};
};
class B : public A {
public:
void g() {
A a; // <--- compiling error: "Protected function A::A() is not accessible ...". Why?
}
};
int main() {
B b;
b.g();
}
Run Code Online (Sandbox Code Playgroud)
I noticed there is a related post, but the class there is a template class. Mine is just a …
我有两节课
package a;
public class A {
protected void doSomething() {
}
protected static class C {
protected C(int c) {
}
}
}
package b;
public class B extends A {
@Override
protected void doSomething() {
C c = new C(0); //compile error
C c2 = new C(0){}; //legal
}
}
Run Code Online (Sandbox Code Playgroud)
我已阅读第 6.6.2.2 章。访问受保护的 JLS 构造函数(https://docs.oracle.com/javase/specs/jls/se11/html/jls-6.html),但我仍然对解释感到困惑。new C(0);即使 B 是 A 的孩子,调用超级构造函数有什么问题?
谢谢 :-)
为什么“内部常量”在子类中被覆盖,而“受保护常量”却不能?
示例代码:
class A
{
internal const string iStr = "baseI";
protected const string pStr = "baseP";
void foo()
{
string s = B.iStr; //childI
string t = B.pStr; //baseP
}
}
class B : A
{
internal new const string iStr = "childI";
protected new const string pStr = "childP";
}
Run Code Online (Sandbox Code Playgroud)
预期 B.pStr 返回“childP”。
我正在尝试在php中构建一个应用程序,我有一个我正在部署的加密/解密方法,为了增强安全性,我将这两个方法声明为受保护,我计划让任何需要它们的类继承它们.这有什么缺点吗?恶意用户也可以利用它们被声明受保护的事实吗?
我有抽象类A,从中继承了许多类.在派生类中,我试图访问A槽A指针中的受保护函数.但是我收到编译器错误.
class A
{
protected:
virtual void f()=0;
};
class D : public A
{
public:
D(A* aa) :mAPtr(aa){}
void g();
protected:
virtual void f();
private:
A* mAPtr; // ptr shows to some derived class instance
};
void D::f(){ }
void D::g()
{
mAPtr->f();
}
Run Code Online (Sandbox Code Playgroud)
编译器错误说:无法访问A类中声明的受保护成员A :: f.
如果我声明mAPtr是D*,而不是A*所有编译.我不明白为什么会这样.
我有一个Excel工作表,就像一个应用程序,带有表单控制按钮,允许用户"浏览"记录.First,Previous,Next和Last循环通过其中一个工作表记录,在我的"表单"工作表中显示值.
当用户不处于编辑或添加模式时,我想锁定单元格以防止用户修改内容.
我尝试了Range("A1:O24").Locked = True,但我仍然可以在单元格中键入新值.
有谁知道怎么做到这一点?我需要我的vba代码才能在用户'导航'时为单元格分配新值,但是为了防止用户输入新值,除非在添加或编辑模式下.
就像在C ++中一样,受保护的成员在私有继承中变得私有。所以我很困惑Java会发生什么。这里的访问说明符保持不变还是什么?喜欢
如果假设下面的代码存在,那么shiva仍将在classB内部保持受保护状态吗?我们可以在classC中再次使用它吗?
任何帮助将不胜感激。
package package1
class classA
{
protected shiva;
}
////////////////////////
import package1
package package2
class classB extends classA
{}
//////////////////////
import package2
class classC extends classB
{}
Run Code Online (Sandbox Code Playgroud) protected ×10
c++ ×4
java ×4
inheritance ×2
.net ×1
access ×1
c# ×1
constants ×1
constructor ×1
excel ×1
excel-vba ×1
googletest ×1
internals ×1
office-2007 ×1
php ×1
private ×1
public ×1
static ×1
uml ×1
vba ×1