当我扩展一个类时,我希望覆盖方法,并像保护的方法一样在某个类中更改它们的可访问性。当我编译它时,它写着:“不兼容的重写”。我不能减少,也不能增加能见度。
减少是没有意义的,我也不需要它,但我能够在中增加方法的可见性。为什么不在ActionScript 3中呢?
public class OldClass
{
protected function doStuff() : void
{}
}
public class NewClass extends OldClass
{
override public function doStuff() : void
{}
}
在C#中,基类的虚方法可以被它的派生类覆盖或隐藏,例如
using System;
class A {
public virtual void M() {
System.Console.WriteLine("A");
}
}
class B: A {
public override void M() {
System.Console.WriteLine("B");
}
}
class C: A {
public new void M() {
System.Console.WriteLine("C");
}
}
cl
我有两堂课。在基类A中,虚函数window(void)声明为常量const,而在派生类B中,window(void)未声明为cont。这能满足多态吗?如果我主要调用window(),它会首先调用派生类B window(),然后调用window()的A类版本吗?在我的情况下它不是这样做的。我是否也要把const放在函数的末尾?
class A
{
public:
virtual int window (void) const
{
std::cout<<" We are in class A "<<s
可能重复:
有没有一种方法可以判断方法是否是覆盖?例如:
public class Foo
{
public virtual void DoSomething() {}
public virtual int GimmeIntPleez() { return 0; }
}
public class BabyFoo: Foo
{
public override int GimmeIntPleez() { return -1; }
}
是否有可能对BabyFoo进行反思并判断GimmeIntPleez是否是一种覆盖?
我有一段代码(是从我的现实生活中设计出来的)
它无法编译,抱怨ExtendsB没有实现B::Run(A* a)。然而,理解A* Run();的扩展并没有问题。
class A { };
class ExtendsA : public A { };
class B
{
public:
virtual ~B(){}
virtual void Run(A* a) = 0;
virtual A* Run() = 0;
};
class ExtendsB : public B
{
public:
virtual ~ExtendsB(){}
// Not
我正在使用Unity容器来解析我的对象。然而,我遇到了一个问题。当我有多个构造函数时--团结如何知道使用哪一个构造函数?当我有一个有参数和一个没有参数的时候,它似乎使用了一个参数。我可以显式地告诉它要使用哪个构造函数吗?
具体来说,我有一个类似于下面的Person类的情况,它有两个构造函数。在这种情况下,我希望IoC容器使用默认的构造函数--没有参数--但是它选择了带有参数的构造函数。
public class SomeValueObject
{
public SomeValueObject(string name)
{
Name = name;
}
我有一个具有受保护值x的类,还有一个扩展该类的类。
在扩展类中,return super.getX()和return x有什么区别吗?
他们都能明显地看到变量,对吗?我的印象是,这些值是完全相同的,所以我的教授说使用super.getX()而不是仅仅返回x是有原因的吗?
示例:
public int getX(){
return x;
}
vs
public int getX(){
return super.getX();
}
我之所以有两个getX方法,是因为扩展的getX根据其他值检查并将操作应用于值x。
场景:I有一个抽象类方法,用于根据属性值调用不同的数据库存储过程,该属性值由具体的类构造设置。特定的具体类需要向存储过程发送额外的参数。
问题:如果具体类是特定类型,那么从抽象类方法访问具体类类型并向数据库存储过程发送额外参数是否是一个好的实践?下面是代码片段:如果我做错了,请提出建议。
Public MustInherit Class dbBaseCustomField
Protected _TableName as string
Public Sub Save(conn as string, customField as CustomField)
lSqlCommand.
我为我的C#对象使用了NHibernate,因此我有几个模型类。
让我们假设下面的例子:
using System;
namespace TestProject.Model
{
public class Room
{
public virtual int Id { get; set; }
public virtual string UniqueID { get; set; }
public virtual int RoomID { get; set; }
public virtual float Area { g
public class HelloWorld
{
protected int num = 12;
public void callme()
{
System.out.print(this.num);
}
public static void main(String[] args)
{
HelloWorld myObject1 = new HelloWorld();
myObject1.callme();
OtherClass myObject2 = new OtherClass();
myObject2.callme();
链接问题是不一样的--甚至没有提到override
编辑:新的重复列表包含一个合法的副本,我没有从搜索中找到。
在问这个问题之前,我不知道是否在派生类成员中使用virtual是一个有争议的问题。
我刚刚遇到了一些源代码,如下所示:
class A
{
virtual void method();
};
class B : public A
{
void method() override;
}
即使在阅读了之后,我也不知道如何解释这一点。
override在这里是否意味着virtual?void B::method()不是被标记为虚拟函数,而是标记为override。那么,
可能重复:
我这里有一个简单但令人困惑的问题。与在基类中定义的方法相比,对重写的方法具有不同的返回值类型是否合法?我这么做了编译器也没抱怨..。谁能解释一下吗?
class MyBaseClass
{
int value;
public:
virtual int getValue() = 0;
};
class MyClass : public MyBaseClass
{
double value;
public:
virtual double getValue(); // here!!! return is double, not int
};
我使用玻璃映射器中的GetDataSourceItem方法将我的数据源项返回给视图,当数据源为空时,调试代码控制器中的calloutModel将为空,但是从视图中,模型将不为空,它将具有当前项目模型,我使用以下代码:
我的控制器操作:
public ActionResult Callout()
{
// I didn't fill the datasource in the component
// calloutModel value is coming null.
var calloutMo
我无意中写了这个方法:
public static new iTextSharp.text.Color ITextFocusColor()
{
return new iTextSharp.text.Color(234, 184, 24);
}
它的工作方式与怀疑的一样,但我非常惊讶的是,它允许在方法的返回类型中使用new关键字。新的和不新的会有什么影响/区别吗?或者新的是用来做什么的?
这在其他面向对象语言中也是可能的吗?
下面是我正在尝试编译的c#代码,testDMO是从testDMOBase继承的,然后测试是从testBase继承的
public abstract class testDMOBase { }
public class testDMO : testDMOBase { }
public abstract class testBase
{
abstract protected void LoadCRUD(testDMOBase dmo);
}
public class test : testBase
{
override protected void LoadCRUD(testDMO
下面是我试图分析的代码。
class Acc{
public void aMethod(List<Integer> A){
System.out.println(A.toString());
}
}
class Back extends Acc{
public void aMethod(String A){
System.out.println(A);
}
}
在这里,如果我调用它
Acc a = new Back();
a.aMethod(list);
但是在调试父类的方法是called.But时,应该按照我的un
我对VB.net相当陌生,我不能编译这段代码,我也不明白为什么。
MustInherit Class Poligono
Protected p_cant_Lados As Integer
Public Property cant_Lados() As Integer
Get
Return p_cant_Lados
End Get
Set(ByVal value As Integer)
p_cant_Lados = value
End Set
End Prop
当我试图用一种常见的方式--使用虚拟继承--来“解决”通常的钻石问题时,出现了一个奇怪的问题:
A
/ \* both virtual
B C
\ /
D
然而,我的基类A没有默认构造函数,所以我从D手动调用它。然而,当我试图将一个类E添加到这个菱形中作为C继承时
A
/ \* both virtual
B C
\ / \
D E
仍然需要在E构造函数中手动调用A的构造函数,即C不需要从E创建A,即使没有多重继承也没有钻石A-C-E。
class A
{public:
A (int _N): N(
为什么不能在静态方法中使用base关键字来使用基类方法?
这两种方法都可以在编译时使用。
class A
{
public virtual void Func(int a=4){
Console.WriteLine(" A Class: "+a);
}
}
class B : A
{
public new void Func(int a = 12)
{
Console.WriteLine(" B Class: "+ a);
}
}
class C : B
{
public st
我有一个基类"BaseClass“和n个派生类DerivedCLass1,DerivedClass2...(我不知道“派生”是否是正确的术语,但我的DerivedClassX是BaseClass,只添加了几个方法。如Vehicle vs Car / MotorCycle / Truck)
所有的派生类都共享一个生成/存储pdf的storePDF函数。这个方法不应该从BaseClass实例中调用,因为这是不相关的。但我不希望代码在派生类中重复。我应该如何组织我的课程?(或接口)
public class BaseClass
{
public static string selec
我需要定义一个执行浅拷贝的Clone()方法。(不需要很深的副本)
但我也需要它来复制派生类的成员。
如果我有
class Base {
int baseMember;
public (virtual?) Base Clone() {
return (Base)this.MemberwiseClone()
}
}
那么,我是否应该导出Clone()的所有其他类?derivedMember也会被Base.Clone()复制吗?
class Derived {
int derivedMember; //will this also be c
我想返回一个结构,它使用从3子类中的一个派生出来的数字和一个对象,该子类告诉方法在哪里添加数字。我的思想过程是,使用运行时多态性,我可以重载方法,并在3个变量中包含不同子类的和。但是,这似乎没有发生,因为对象没有被丢弃到它的子类中。请记住,程序事先不知道哪个子类将是结构,,因此手动转换是不可能的。
具有子类的类(s.h):
#pragma once
class Sugar{};
class Nincs : public Sugar
{
private:
static Nincs* ins;
Nincs(){};
public:
我从Java认证问题中得到了一个特定的代码,它的输出让我有些困惑。这是代码
class Baap {
public int h = 4;
public int getH() {
System.out.println("Baap " + h);
return h;
}
}
class Beta extends Baap {
public int h = 44;
public int getH() {
System.out.println("Beta " + h);