Soy un programador de C# nuevo para el lenguaje D. Estoy un poco confundido con OOP en el lenguaje de programación D.¿Por qué una función con modificador protegido puede ser anulada y accesible en todas partes?
Suponiendo que tengo la clase siguiente:
public class A {
protected void foo() {
writefln("A.foo() called.");
}
};
public class B : A {
public override void foo() {
writefln("B.foo() called.");
}
};
El modificador protected
significa que puedo tener acceso al método .foo()
sólo en clase heredada, ¿por qué este programa D compila normalmente?
Aquí es el equivalente a C# .NET:
using System;
public class A {
protected virtual void foo() {
Console.WriteLine("a.foo() called.");
}
};
public class B : A {
public override void foo() {
Console.WriteLine("b.foo() called.");
}
};
public class MainClass {
public static void Main(string[] args) {
A a = new A();
B b = new B();
a.foo();
b.foo();
}
};
Que no compila y dado el siguiente mensaje de error (como yo esperaba):
test.cs (10 , 30): error CS0507:
B.foo()': cannot change access modifiers when overriding
protegida 'heredó el miembro `A.foo()'
¿Puede alguien explicar este comportamiento D? Gracias por adelantado.
¿Por qué estás confundido? C# y D son solo idiomas diferentes, por lo que hacen las cosas de manera diferente. A primera vista, ambos enfoques tienen algún sentido para mí, por lo que depende de los diseñadores del idioma decidir qué camino tomar. – svick
Humm, porque tenía en mente que los modificadores de acceso de un lenguaje de programación orientado a objetos funcionaban de la misma manera. – Jack
downvotes- puede explicar por favor? – Jack