Я C #программист, новичок в языке D. Я немного путать с ООП в языке программирования D.
Предполагая, что у меня есть следующий класс:
public class A {
protected void foo() {
writefln("A.foo() called.");
}
};
public class B : A {
public override void foo() {
writefln("B.foo() called.");
}
};
Модификатор protected
означает, что я могу получить доступ к методу .foo()
только в унаследованном классе, так почему же это Программа D компилируется нормально?
Вот эквивалент 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();
}
};
Она не компилируется и дает следующее сообщение об ошибке (, как я и ожидал):
test. cs (10,30 ):ошибка CS0507:
B.foo()': cannot change access modifiers when overriding
protected' унаследованный член `A.foo ()'
Может кто-нибудь объяснить это поведение D? Заранее спасибо.