Klasy abstrakcyjne to klasy, których nie można utworzyć. Istnieją, aby zapewnić wspólną funkcjonalność i specyfikacje interfejsu dla kilku konkretnych klas.
Zawsze deklarujemy czystą funkcję wirtualną jako: virtual void fun () = 0 ; To znaczy, zawsze jest przypisane do 0. Rozumiem, że ma to na celu zainicjowanie wpisu vtable dla tej funkcji na NULL, a każda inna wartość tutaj powoduje błąd czasu kompilacji. Czy to rozumienie jest poprawne, czy nie?
Jak przetestować konkretne metody klasy abstrakcyjnej za pomocą PHPUnit? Spodziewałbym się, że będę musiał stworzyć jakiś obiekt w ramach testu. Chociaż nie mam pojęcia, jaka jest najlepsza praktyka w tym zakresie lub czy PHPUnit na to pozwala.
Czy istnieje sposób na stworzenie abstrakcyjnej klasy w Swift Language, czy jest to ograniczenie, tak jak Objective-C? Chciałbym stworzyć klasę abstrakcyjną porównywalną z tym, co Java definiuje jako klasę abstrakcyjną.
W programie Visual Studio, jak wyświetlić wszystkie klasy dziedziczone z klasy bazowej? Na przykład w ASP.NET MVC istnieje kilka typów „ ActionResult ” - i wszystkie one dziedziczą z / implementują klasę bazową ActionResult. Wygląda na to, że jeśli nie „wiesz” tego Viewi nie Jsonsą to prawidłowe ActionResulttypy, nie ma …
Mój kod testowy w C #: namespace DSnA { public abstract class Test : IComparable { } } Powoduje następujący błąd kompilatora: error CS0535: 'DSnA.Test' does not implement interface member 'System.IComparable.CompareTo(object)' Ponieważ klasa Testjest klasą abstrakcyjną , dlaczego kompilator wymaga jej do zaimplementowania interfejsu? Czy ten wymóg nie powinien być …
Chciałbym stworzyć abstrakcyjną funkcję w szybkim języku. Czy to możliwe? class BaseClass { func abstractFunction() { // How do I force this function to be overridden? } } class SubClass : BaseClass { override func abstractFunction() { // Override } }
Czy istnieje sposób na zdefiniowanie abstrakcyjnych właściwości klas w PHP? abstract class Foo_Abstract { abstract public $tablename; } class Foo extends Foo_Abstract { //Foo must 'implement' $property public $tablename = 'users'; }
Ciekawa rzecz dzieje się w Javie, gdy używasz klasy abstrakcyjnej do implementacji interfejsu: może brakować niektórych metod interfejsu (tj. Nie ma ani abstrakcyjnej deklaracji, ani rzeczywistej implementacji), ale kompilator nie narzeka. Na przykład, biorąc pod uwagę interfejs: public interface IAnything { void m1(); void m2(); void m3(); } Następująca klasa …
Wiem, że w rubinie nie ma pojęcia klasy abstrakcyjnej. Ale jeśli w ogóle trzeba to wdrożyć, jak się do tego zabrać? Próbowałem czegoś takiego ... class A def self.new raise 'Doh! You are trying to write Java in Ruby!' end end class B < A ... ... end Ale kiedy …
Zastanawiałem się, co skłoniłoby programistę do wybrania albo idiomu Pimpl, albo czystej wirtualnej klasy i dziedziczenia. Rozumiem, że idiom pimpl ma jedno wyraźne dodatkowe wskazanie dla każdej metody publicznej i narzutu tworzenia obiektów. Z drugiej strony klasa wirtualna Pure ma niejawne pośrednictwo (vtable) do dziedziczenia implementacji i rozumiem, że nie …
W poniższym kodzie tworzę podstawową klasę abstrakcyjną Base. Chcę, aby wszystkie klasy, które dziedziczą, Basezapewniały namewłaściwość, więc utworzyłem tę właściwość jako @abstractmethod. Potem stworzył podklasę Baseo nazwie Base_1, które mają za zadanie dostarczyć pewną funkcjonalność, ale nadal pozostają abstrakcyjne. W programie nie ma namewłasności Base_1, ale mimo to Python instatinuje …
Załóżmy, że KeyAdapterjest to klasa abstrakcyjna z kilkoma metodami, które można przesłonić. W javie mogę: KeyListener keyListener = new KeyAdapter() { @Override public void keyPressed(KeyEvent keyEvent) { // ... } }; Jak zrobić to samo w Kotlinie?
W mojej aplikacji w języku Python chcę utworzyć metodę, która będzie jednocześnie staticmethodrozszerzeniem a i abc.abstractmethod. Jak mam to zrobic? Próbowałem zastosować oba dekoratory, ale to nie działa. Jeśli to zrobię: import abc class C(object): __metaclass__ = abc.ABCMeta @abc.abstractmethod @staticmethod def my_function(): pass Dostaję wyjątek *, a jeśli to zrobię: …
Wyraźnie pamiętam, że kiedyś wytyczną forsowaną przez Microsoft było dodanie sufiksu „Base” do klasy abstrakcyjnej, aby uniknąć faktu, że jest abstrakcyjna. Stąd mamy zajęcia jak System.Web.Hosting.VirtualFileBase, System.Configuration.ConfigurationValidatorBase, System.Windows.Forms.ButtonBase, i, oczywiście System.Collections.CollectionBase. Ale ostatnio zauważyłem, że wiele klas abstrakcyjnych we frameworku wydaje się nie przestrzegać tej konwencji. Na przykład wszystkie poniższe …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.