Ориентация на объект — абстрактные классы и абстрактные методы

искусственный интеллект

Если класс не связан с конкретной пищей, а лишь выражает абстрактное понятие, только как базовый класс своего производного класса, такой класс является производным классом, в абстрактном классе объявить абстрактные методы в абстрактных классах Да, если добавлено ключевое слово abstract, это абстрактный метод. Модификатор abstract можно использовать для классов, методов, свойств, индексаторов и событий.

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

Члены, помеченные как абстрактные или содержащиеся в абстрактном классе, должны быть реализованы классом, производным от абстрактного класса.

Класс можно объявить абстрактным, поместив ключевое слово abstract перед определением класса. Например:

public abstract class A

{

    // Class members here.

}

Цель абстрактного класса — предоставить общее определение базового класса, которое может совместно использоваться несколькими производными классами.

Абстрактные классы обладают следующими характеристиками:

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

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

Абстрактный класс, реализующий интерфейс, может отображать методы интерфейса на абстрактные методы. Например:

interface I

{void M();}

abstract class C : I

{

public abstract void M();

}

Абстрактные методы являются неявно виртуальными методами.

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

В абстрактных классах разрешены только объявления абстрактных методов.

Использование модификатора static или virtual в объявлении абстрактного метода является ошибкой.

Когда абстрактный класс наследует виртуальный метод от базового класса, абстрактный класс может переопределить этот виртуальный метод абстрактным методом. Например:

public class D 

{

public virtual void DoWork(inti)      {   // Original implementation.    }

}

public abstract class E : D

{ public abstract override void DoWork(inti);}

public class F : E  

{

public override void DoWork(inti)  

{  // New implementation.  }

}

Если виртуальный метод объявлен абстрактным, этот метод остается виртуальным для всех классов, наследуемых от абстрактного класса.

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

В приведенном выше примере DoWork класса F не может вызывать DoWork класса D. Таким образом, абстрактные классы могут заставить производные классы предоставлять новые реализации виртуальных методов. Помимо разницы в синтаксисе объявления и вызова, абстрактные свойства ведут себя так же, как абстрактные методы. Использование модификатора abstract для статического свойства является ошибкой.

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

Пример: пользовательский абстрактный класс для вычисления площади круга

public partial class Form1 : Form

    {

public Form1()

{InitializeComponent();}

private void button1_Click(object sender, EventArgs e)

        {

CalcAreacalcArea = new CalcArea();//Создаем экземпляр производного класса

Roll roll = calcArea;//Создаем экземпляр абстрактного класса с объектом производного класса

      String strNum=textBox1.Text.Trim();//Записываем содержимое текстового поля TextBox

if (strNum != "")//Определяем, введен ли радиус окружности

            {

try

                {

roll.R = int.Parse(strNum);//Используем объект абстрактного класса для доступа к атрибуту radius в абстрактном классе

TextBox2.Text = roll.Area().ToString();//Вызываем пользовательский метод, чтобы найти площадь круга

                }

catch

                {

MessageBox.Show("Введите правильный радиус круга!");

                }

            }

        }

    }

public abstract class Roll

{ // радиус окружности

privateint r = 0;

publicint R

{ get {return r;}set{r = value;}  }

public abstract double Area();// абстрактный метод, используемый для вычисления площади круга

    }

открытый класс CalcArea : Roll//Наследовать абстрактный класс

    {

public override double Area() // Переопределить метод вычисления площади круга в абстрактном классе

        {

returnMath.PI * R * R;

        }

}

 

В чем разница между виртуальным методом и абстрактным методом?
абстрактный методТолько объявление не реализовано, его нужно реализовать в подклассе; виртуальный методСуществуют объявления и реализации, которые можно переопределить в подклассах или не использовать реализацию суперкласса по умолчанию.,
виртуальный методесть код реализации, абстрактный методнет,
иАбстрактные классы не могут быть созданы, который может быть создан толькоПроизводный класс, который реализует все абстрактные методы
Абстрактный метод — это разновидность виртуального метода.
Абстрактный метод не реализован, он существует только для унификации интерфейса для производных классов, производные классы должны реализовывать этот метод
Если вы пишете базовый класс, который никогда не будет реализован, вам следует определить один или несколько методов в этом классе как
абстрактный метод.
Абстрактные методы существуют только в абстрактных классах, а классы с абстрактными методами должны быть определены как абстрактные классы.
На самом деле, мы должны сначала понять,Виртуальные методы тесно связаны с полиморфизмом, виртуальный метод позволяет производному классу полностью или частично переопределить метод класса, и необходимо написать тело метода. Абстрактный класс может содержать абстрактные методы и общие методы, абстрактный класс не может быть новым, абстрактный метод — это просто определение, тела метода нет, то есть нет {}, и в нем не должно быть прописано никакого содержимого. Два сходства в том, что они оба переписаны с переопределением