Абстрактный класс

Абстрактный класс в объектно-ориентированном программировании — базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП — полиморфизм. Абстрактный класс может содержать (и не содержать[1]) абстрактные методы и свойства. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных потомков. Абстрактные классы представляют собой наиболее общие абстракции, то есть имеющие наибольший объём и наименьшее содержание.

В одних языках создавать экземпляры абстрактных классов запрещено, в других это допускается (например, Delphi), но обращение к абстрактному методу объекта этого класса в процессе выполнения программы приведёт к ошибке. Во многих языках допустимо объявить любой класс абстрактным, даже если в нём нет абстрактных методов (например, Java), именно для запрета создания экземпляров. Абстрактный класс можно рассматривать в качестве интерфейса к семейству классов, порождённому им, но, в отличие от классического интерфейса, абстрактный класс может иметь определённые методы, а также свойства.

Абстрактные методы всегда являются виртуальными, однако «абстрактный» и «виртуальный» - разные понятия.

Примеры

Delphi

В Delphi может быть объявлен абстрактный класс с абстрактными методами:

TAbstractClass = class 
  procedure NonAbstractProcedure;
  procedure AbstractProcedure; abstract;
end;

Для такого класса может быть создан объект, но обращение к методу AbstractProcedure этого объекта во время выполнения вызовет ошибку.

В последних версиях Delphi также может быть объявлен абстрактным сам класс:

TAbstractClass = class abstract
  procedure SomeProcedure;
end;

Хотя метод SomeProcedure может быть не абстрактным и реализован в рамках этого класса, создавать объекты объявленного таким образом класса недопустимо.

C++

На C++ абстрактный класс объявляется включением хотя бы одной чистой виртуальной функции, типа virtual _сигнатура_функции_ =0;, которая, как и другие, может быть заменена. Пример на языке программирования C++:

#include <iostream>

class CA { // Абстрактный класс
  public:
    CA ( void ) { std::cout << "This object of the class "; }

    virtual void Abstr ( void ) = 0; // Чистая (пустая) виртуальная функция.
    void         fun   ( void ) { std::cout << "Реализация не будет наследоваться!"; }

    ~CA () { std::cout << "." << std::endl; } //Вызывается в обр. порядке конструкторов
  };

class CB : public CA {
  public:
    CB ( void ) { std::cout << "CB;"; }

    void Abstr ( void ){ std::cout << " call function cb.Abstr();"; } //Подменяющая функция.
    void fun   ( void ){ std::cout << " call function cb.fun()"; }

    ~CB () {} // Неверно для абстр. кл. ~CB(){ ~CA(); } 
  };

class CC : public CA {
  public:
    CC ( void ) { std::cout << "CC;"; }

    void Abstr ( void) { std::cout << " call function cc.Abstr();"; } //Подменяющая функция.
    void fun   ( void ) { std::cout << " call function cc.fun()"; }

  ~CC () {} // Неверно для абстр. кл. ~CC(){ ~CA(); } 
  };

int main () {
  std::cout << "Program:" << std::endl;
  CB cb;
  cb.Abstr(); cb.fun(); cb.~CB();

  CC cc;
  cc.Abstr(); cc.fun(); cc.~CC();

  return 0;
  }

Результат работы программы:

Program:
This object of the class CB; call function cb.Abstr(); call function cb.fun().
This object of the class CC; call function cc.Abstr(); call function cc.fun().
.
.

C#

Модификатор abstract указывает на то, что класс может быть использован только как базовый класс при наследовании. Абстрактные классы могут содержать абстрактные методы и методы доступа. Создавать экземпляры абстрактного класса нельзя через вызов конструктора, но экземпляр абстрактного класса создаётся неявно при построении экземпляра производного конкретного класса. Неабстрактный класс, являющийся производным от абстрактного, должен содержать фактические реализации всех наследуемых абстрактных методов и методов доступа. Чтобы указать отсутствие реализации в методе или свойстве, воспользуйтесь модификатором abstract в объявлении метода или свойства. Абстрактный метод - это неявный виртуальный метод. Объявления абстрактных членов (методов, свойств, событий) допускаются только в абстрактных классах и интерфейсах (стереотипах, являющихся аналогом чистых абстрактных классов, в которых запрещена любая реализация). Поскольку объявление абстрактного метода не предоставляет фактической реализации, тело метода отсутствует, объявление метода просто заканчивается точкой с запятой, аналогично объявлению прототипов:

public abstract void AbstractMethod();

Реализация предоставляется методом переопределения override, который является членом неабстрактного класса.

Использование статических или виртуальных модификаторов в объявлении абстрактного метода или свойства является недопустимым. Действие абстрактных свойств аналогично абстрактным методам, за исключением отличий в синтаксисе объявлений и вызовов. Абстрактное унаследованное свойство может быть переопределено в производном классе за счёт включения объявления свойства, использующего модификатор переопределения.

    abstract class BaseClass   // Abstract class
    {
        protected int _x = 100;
        protected int _y = 150;
        public abstract void AbstractMethod();   // Abstract method
        public abstract int X    { get; }
        public abstract int Y    { get; }
    }

    class DerivedClass : BaseClass
    {
        public override void AbstractMethod()
        {
            _x++;
            _y++;
        }

        public override int X   // overriding property
        {
            get
            {
                return _x + 10;
            }
        }

        public override int Y   // overriding property
        {
            get
            {
                return _y + 10;
            }
        }

        static void Main()
        {
            DerivedClass o = new DerivedClass();
            o.AbstractMethod();
            Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
        }
    }
    // Output: x = 111, y = 161

Абстрактный класс должен предоставлять реализацию для всех членов интерфейса. Абстрактный класс, реализующий интерфейс, может отображать методы интерфейса в абстрактных методах.

interface I
{
    void M();
}
abstract class C : I
{
    public abstract void M();
}

Абстрактный класс с модификатором sealed использовать нельзя, поскольку модификатор abstract и sealed имеют взаимоисключающие значения. Модификатор sealed запрещает наследовать класс, в то время как модификатор abstract указывает, что класс обязан иметь производные классы.

Примечания

  1. Abstract Methods and Classes (The Java™ Tutorials > Learning the Java Language > Interfaces and Inheritance). Дата обращения: 30 сентября 2010. Архивировано 2 августа 2010 года.

См. также

Литература

  • Подбельский В. В. Глава 10.3 Виртуальные функции и абстрактные классы \\ Абстрактные классы. // Язык Си++ / рец. Дадаев Ю. Г.. — 4. — М.: Финансы и статистика, 2003. — С. 365-373. — 560 с. — ISBN 5-279-02204-7, УДК 004.438Си(075.8) ББК 32.973.26-018 1я173.

Read other articles:

Tampak depan Radio City Music Hall, 2003 Tempat duduk untuk 5.933 penonton Gapura Proscenium di atas panggung Radio City Music Hall adalah tempat hiburan terkemuka di Rockefeller Center di New York City. Nama julukannya adalah Panggung pertunjukan Amerika, dan untuk suatu waktu merupakan tujuan wisata utama di kota ini. Bagian interiornya dinyatakan sebagai landmark New York City pada 1978. Sejarah awal Kompleks seluas 49.000 m² di midtown Manhattan ini yang dikenal sebagai Rockefeller Cente...

 

Mathias ChristiansenChristiansen pada tahun 2016.Informasi pribadiKebangsaanDenmarkLahir20 Februari 1994 (umur 30)Bornholm, DenmarkTempat tinggalKopenhagen, DenmarkTinggi186 cm (6 ft 1 in)Tahun aktif2011–sekarangPeganganKananGanda putra & campuranPeringkat tertinggi19 (MD dengan David Daugaard 21 September 2017)4 (XD dengan Christinna Pedersen 25 Oktober 2018)Peringkat saat ini81 (MD dengan Niclas Nøhr)9 (XD dengan Alexandra Bøje) (8 November 2022[1]) ...

 

Salah satu faktor utama pendirian Muhammadiyah di Kota Salatiga adalah kebijakan pemerintah Hindia Belanda yang menciptakan kelas sosial di dalam masyarakat Jawa (Rohman 2019, hlm. 17). Muhammadiyah terbentuk di Kota Salatiga dalam rangka merespon kondisi sosial-politik umat Islam akibat kebijakan pemerintah Hindia Belanda yang menciptakan kelas sosial di dalam masyarakat Jawa. Saat itu, orang-orang kulit putih (khususnya Belanda) memiliki kedudukan paling tinggi, kedudukan kedua ditempa...

Tribun beralih ke halaman ini. Untuk jejaring surat kabar Indonesia, lihat Tribun Network. Romawi Kuno Artikel ini adalah bagian dari seri Politik dan KetatanegaraanRomawi Kuno Zaman Kerajaan Romawi753–509 SM Republik Romawi509–27 SM Kekaisaran Romawi27 SM – 395 M Principatus Dominatus Wilayah Barat395–476 M Wilayah Timur395–1453 M Lini Masa Konstitusi Romawi Konstitusi Zaman Kerajaan Konstitusi Zaman Republik Konstitusi Zaman Kekaisaran Konstitusi Akhir Zaman Kekaisaran Senatus Sid...

 

العلاقات الأفغانية الجزائرية أفغانستان الجزائر   أفغانستان   الجزائر تعديل مصدري - تعديل   العلاقات الأفغانية الجزائرية هي العلاقات الثنائية التي تجمع بين أفغانستان والجزائر.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية للدولتين:...

 

KesatrianKelurahanPeta lokasi Kelurahan KesatrianNegara IndonesiaProvinsiJawa TimurKotaMalangKecamatanBlimbingKode Kemendagri35.73.01.1009 Kode BPS3573040003 Luas147 ha[1]Jumlah penduduk11.270 jiwa (data: Juni 2009)[1]Situs webhttp://kelkesatrian.malangkota.go.id/ Kesatrian adalah sebuah kelurahan di wilayah kecamatan Blimbing, Kota Malang, provinsi Jawa Timur. Kelurahan ini di sebelah utara berbatasan dengan kelurahan Bunulrejo, timur dengan kelurahan Polehan, selatan de...

Series of two uncrewed Soviet spacecraft Mars 1M spacecraft Mars 1M was a series of two uncrewed spacecraft which were used in the first Soviet missions to explore Mars.[1] They were the earliest missions of the Mars program. The Western media dubbed the spacecraft Marsnik, a portmanteau of Mars and Sputnik. Spacecraft Mars 1M No.1, known in the West as Marsnik 1, Mars 1960A and Korabl 4, was destroyed in a launch failure on October 10, 1960. In 1962, NASA Administrator James E. Webb ...

 

Groß Rönnau Lambang kebesaranLetak Groß Rönnau di Segeberg NegaraJermanNegara bagianSchleswig-HolsteinKreisSegeberg Municipal assoc.Trave-LandPemerintahan • MayorHans-Heinrich TiedemannLuas • Total6,38 km2 (246 sq mi)Ketinggian32 m (105 ft)Populasi (2013-12-31)[1] • Total573 • Kepadatan0,90/km2 (2,3/sq mi)Zona waktuWET/WMPET (UTC+1/+2)Kode pos23795Kode area telepon04551Pelat kendaraanSESitus webwww....

 

United States historic placeAlden Park TowersU.S. National Register of Historic Places Show map of MichiganShow map of the United StatesInteractive mapLocation8100 E. Jefferson Ave.,Detroit, MichiganCoordinates42°21′5″N 82°59′40″W / 42.35139°N 82.99444°W / 42.35139; -82.99444Built1922; 102 years ago (1922)Architectural styleTudor RevivalMPSEast Jefferson Avenue Residential TRNRHP reference No.85002933[1]Added to NRHP...

Eastleighcollegio elettoraleEastleigh nell'Hampshire Stato Regno Unito CapoluogoEastleigh, Bishopstoke, Botley, Hedge End, Hamble-le-Rice Elezioni perCamera dei comuni Eletti1 deputato (Paul Holmes, Con, dal 2019) Tipologiauninominale Istituzione1955 Creato daWinchester Manuale Eastleigh è un collegio elettorale inglese situato nell'Hampshire rappresentato alla Camera dei comuni del parlamento del Regno Unito. Elegge un membro del parlamento con il sistema maggioritario a turno uni...

 

علوم فيزيائيةصنف فرعي من علوم طبيعية يمتهنه physical scientist (en) فروع  القائمة ... فيزياء — علم الفلك — كيمياء — علوم الأرض — علوم الفضاء — علم المواد — علم البلورات — إلكترونيات — علم القياس تعديل - تعديل مصدري - تعديل ويكي بيانات العلوم الفيزيائية مصطلح واسع يشمل الكثير من فر...

 

Keith SilversteinNama lainDavid Roach, Darin BugPekerjaanPengisi suaraTahun aktif1999–sekarangAgenDean Panero TalentSuami/istriRosemary Do ​(m. 2010)​Anak3Situs webwww.keithsilverstein.com Keith Silverstein adalah pengisi suara Amerika, yang dikenal karena mengisi suaranya ke versi bahasa Inggris dari anime dan video game Jepang, yang berafiliasi dengan Bang Zoom! Entertainment, Viz Media, Studiopolis dan Funimation. Dia terkenal karena perannya sebag...

Cruise ship built in 1999 Disney Wonder docked at Nassau History  Bahamas NameDisney Wonder OwnerThe Walt Disney Company OperatorDisney Cruise Line Port of registry Bahamas[1] Ordered1995 BuilderFincantieri Marghera shipyard, Italy[2] Laid downMay 5, 1997 LaunchedFebruary 23, 1998 Sponsored byTinkerbell and Mickey Mouse ChristenedOctober 3, 1999 CompletedJune 18, 1999 Maiden voyageAugust 15, 1999 In service1999–present IdentificationIMO number: 9126819 StatusI...

 

Charlotte-Frédérique de Mecklembourg-SchwerinTitres de noblesseDuchesse de Mecklembourg-Schwerin (d)Hereditary Princess (d)BiographieNaissance 4 décembre 1784LudwigslustDécès 13 juillet 1840 (à 55 ans)RomeSépulture Localisation inconnue (d)Nom dans la langue maternelle Charlotte Friederike, Herzogin zu Mecklenburg-SchwerinNationalité Grand-duché de Mecklembourg-SchwerinActivité SalonnièreFamille Maison de MecklembourgPère Frédéric-François Ier de Mecklembourg-Schwerin...

 

American politician and soldier For other people named James Shields, see James Shields (disambiguation). James ShieldsUnited States Senatorfrom MissouriIn officeJanuary 27, 1879 – March 3, 1879Preceded byDavid H. ArmstrongSucceeded byGeorge Graham VestUnited States Senatorfrom MinnesotaIn officeMay 11, 1858 – March 3, 1859Preceded byHimself (Shadow Senator)Succeeded byMorton S. WilkinsonUnited States Shadow Senatorfrom the Minnesota TerritoryIn officeDecember 19, 1857&#...

For other people named Abu Ishaq, see Abu Ishaq (disambiguation). Persian Shafi'i-Ash'ari scholar Abū Isḥāq al-Shīrāzīأبو إسحاق الشيرازيTitleAmir al-Mu'minin fī al-FiqhShaykh al-Islam[1]PersonalBorn1003FiruzabadDied1083 (aged 79–80)BaghdadReligionIslamNationalityPersianEraIslamic Golden AgeDenominationSunniJurisprudenceShafi'iCreedAsh'ari[2][3]Main interest(s)Fiqh (Islamic jurisprudence), Usul al-Fiqh (principles of jurisprudence), Us...

 

Bài viết này có chứa kí tự ngữ âm IPA. Nếu không thích hợp hỗ trợ dựng hình, bạn có thể sẽ nhìn thấy dấu chấm hỏi, hộp, hoặc ký hiệu khác thay vì kí tự Unicode. Giới hàn lâm đã có nhiều nỗ lực trong việc phục nguyên hệ thống âm vị học của tiếng Hán thượng cổ thông qua bằng chứng văn liệu. Mặc dù hệ chữ tượng hình Hán văn không trực tiếp ký âm từ ngữ, các thành tố...

 

Duke of Berry Charles FerdinandDuke of BerryPortrait by François Gérard, 1820Born(1778-01-24)24 January 1778Palace of Versailles, FranceDied14 February 1820(1820-02-14) (aged 42)Paris, FranceSpouse Marie Caroline of Naples and Sicily ​ ​(m. 1816)​IssueDetailLouise, Duchess of ParmaHenri, Count of ChambordCharlotte, comtesse d'Issoudun (illegitimate)NamesCharles Ferdinand de BourbonHouseBourbonFatherCharles XMotherMaria Theresa of SavoySignature Charle...

Type of church memorial Brass group of 1378 commemorating Sir John Foxley and his two wives in St Michael's Church, Bray, Berkshire A monumental brass is a type of engraved sepulchral memorial once found through Western Europe, which in the 13th century began to partially take the place of three-dimensional monuments and effigies carved in stone or wood. Made of hard latten or sheet brass, let into the pavement, and thus forming no obstruction in the space required for the services of the chu...

 

Đại Hiệp Xã Xã Đại Hiệp Trụ sở UBND xã Đại HiệpHành chínhQuốc gia Việt NamVùngDuyên hải Nam Trung BộTỉnhQuảng NamHuyệnĐại LộcThành lập2007[1]Địa lýTọa độ: 15°55′11″B 108°07′38″Đ / 15,919859°B 108,127174°Đ / 15.919859; 108.127174 Đại Hiệp Vị trí xã Đại Hiệp trên bản đồ Việt Nam Diện tích23,74 km²Dân số (2019)Tổng cộng9.437 người[2]Mật độ398 ng...