SlideShare une entreprise Scribd logo
1  sur  15
• Основы наследования
• Доступ к членам класса и наследование
• Конструкторы и наследование
• Наследование и сокрытие имен
• Создание многоуровневой иерархии
• Виртуальные методы и их переопределение
• Использование ключевого слова sealed для предотвращения
  наследования
• Использование абстрактных классов
• Класс object
•
• Базовый класс (суперклассом)
• Производный класс (подклассом)

class Triangle : TwoDShape
{
  //описание класса Triangle
       …
}
Члены класса могут быть объявлены как:

                      • Private

                     • Protected

                      • Public
Как базовые, так и производные классы могут иметь
 собственные конструкторы.

1. имя_пр_класса переменная = new   имя_пр_класса ()



2.Конструктор_производного_класса(список_параметров)
:base(список_аргументов)
{
// тело конструктора
}
Для сокрытия имен используется:
               • ключевое слово new
               • ключевое слово base

Формат записи: base.член
• Например, из трех классов (TwoDShape, Triangle и
  ColorTriangle) ColorTriangle может быть производным от
  Triangle который, в свою очередь, может быть
  производным от TwoDShape.
                        TwoDShape.




                          Triangle




                        ColorTriangle
class TwoDShape {
    protected double width; // Защищенный член
    protected double height; // Защищенный член
    public TwoDShape() { width = height = 0.0; } // Конструктор по умолчанию.
    public TwoDShape(double w, double h) { width = w; height = h; } /// Конструктор класса TwoDShape.
    public TwoDShape(double x) { width = height = x; } // / Конструктор, создающий объекты, у которых ширина равна высоте.
    public double Width { get { return width; } set { width = value; } } // Свойства width и height.
    public double Height { get { return height; } set { height = value; } }
    public string showDim(){ return "Ширина и высота равны: " + width + " и "+height;}
}
// Класс треугольников, производный от класса TwoDShape.
class Triangle : TwoDShape{
    protected string style; // Защищенный член.
    public Triangle() { style = "null"; }       // Конструктор по умолчанию – вызывает конструктор по умолчании класса TwoDShape
    public Triangle(string s, double w, double h) : base(w, h) { style = s; }// Конструктор с параметрами.
    public Triangle(double x) : base(x) { style = "равнобедренный"; }// Создаем равнобедренный треугольник.
    public double area() { return width * height / 2; }// Метод возвращает значение площади треугольника.
    public string showStyle() { return "Треугольник: " + style; } // Метод отображает тип треугольника.
}
class ColorTriangle : Triangle {
    string color;
    public ColorTriangle(string c, string s, double w, double h) : base(s, w, h) { color = c; }
    // Метод отображает цвет треугольника.
    public string showColor() { return "Цвет: " + color; }
}
• Чтобы объявить метод в базовом классе виртуальным, его
  объявление необходимо предварить ключевым словом
  virtual.

• При переопределении виртуального метода в производном
  классе используется модификатор override.

// Создаем виртуальный метод в базовом классе.
public virtual void Show() {
       Console.WriteLine("Метод Show() в классе Base.");
}
Абстрактный класс создается с помощью модификатора типа
  abstract
abstract class имя класса
{
     // Защищенный члены
     // Конструктор по умолчанию.
     // Конструктор с параметрами.
     // Обычные методы
     // абстрактные методы
   }

• Для объявления абстрактного метода используйте следующий
  формат записи.
             abstract тип имя(список_параметров);
abstract class TWODShape {
protected double width; // Защищенный член
protected double height; // Защищенный член
protected string name; // Защищенный член
 public TWODShape() { width = height = 0.0; name = "null"; } // Конструктор по умолчанию
public TWODShape(double w, double h, string n) { width = w; height = h; name = n; } // Конструктор с
     параметрами.
public TWODShape(double w, double h, string n) { width = w; height = h; name = n; }
 public TWODShape(double x, string n) { width = height = x; name = n; } // Создаем объект, у которого ширина
     равна высоте.
  public TWODShape(TWODShape ob) { // Создаем объект из объекта.
width = ob.width; height = ob.height; name = ob.name;
} // Свойства width, height и name.
 public double Width { get { return width; } set { width = value; } }
 public double Height { get { return height; } set { height = value; } }
 public string Name { get { return name; } set { name = value; } }
public string showDim() { return "Ширина и высота равны "+width + " и " + height; }
// Теперь методы area() и showStyle() абстрактные
public abstract double area();
public abstract string showStyle();
} // Класс треугольников, производный от класса TwoDShape.
class TriAngle : TWODShape {
protected string style; // Защищенный член
public TriAngle() { style = "null"; } // Конструктор по умолчанию.
. public TriAngle(string s, double w, double h) : base(w, h, "треугольник") { style = s; } //Конструктор с
     параметрами
public TriAngle(double x) : base(x, "треугольник") { style = "равнобедренный"; } // Создаем равнобедренный
     треугольник
public TriAngle(TriAngle ob) : base(ob) { style = ob.style; } // Создаем объект из объекта.
public override double area() { return width * height / 2; } Переопределяем метод area() для класса Triangle.
public override string showStyle() { return "Треугольник " + style; } // Отображаем тип треугольника.
  }

// Класс прямоугольников, производный от класса TwoDShape.
class Rectangle : TWODShape {
public Rectangle(double w, double h) : base(w, h, "прямоугольник") { } // Конструктор с параметрами
public Rectangle(double x) : base(x, "прямоугольник") { } // Создаем квадрат.
public Rectangle(Rectangle ob) : base(ob) { } // Создаем объект из объекта.
public bool isSquare() { if (width == height) return true; return false; } // Метод возвращает значение true, если
    прямоугольник является квадратом.
public override double area() { return width * height; } // Переопределяем метод area() для класса Rectangle
public override string showStyle() { return ""; }
          }
• Sealed

• пример sealed-класса.
sealed class А
{
  // ...
}
public static bool
                      • Определяет, является ли объект оb1
Equals(object ob1,      таким же, как объект оb2
   object ob2)

 protected object     • Выполняет "поверхностное
                        копирование" объекта, т.е. копируются
MemberwiseClone(        члены, но не объекты, на которые
         )              ссылаются эти члены


   public Type        • Получает тип объекта во время
    GetType()           выполнения программы
наследование

Contenu connexe

Similaire à наследование

Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Java
itc73
 
3. java lecture classes
3. java lecture classes3. java lecture classes
3. java lecture classes
MERA_school
 
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSКурсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Глеб Тарасов
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Глеб Тарасов
 

Similaire à наследование (17)

Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Java
 
C++ Базовый. Занятие 10.
C++ Базовый. Занятие 10.C++ Базовый. Занятие 10.
C++ Базовый. Занятие 10.
 
3. java lecture classes
3. java lecture classes3. java lecture classes
3. java lecture classes
 
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOSКурсы по мобильной разработке. 1 лекция. Знакомство с iOS
Курсы по мобильной разработке. 1 лекция. Знакомство с iOS
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному коду
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
 
C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 
msumobi2. Лекция 2
msumobi2. Лекция 2msumobi2. Лекция 2
msumobi2. Лекция 2
 
Programming Java - Lecture 02 - Objects - Lavrentyev Fedor
Programming Java - Lecture 02 - Objects - Lavrentyev FedorProgramming Java - Lecture 02 - Objects - Lavrentyev Fedor
Programming Java - Lecture 02 - Objects - Lavrentyev Fedor
 
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий Леванов
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.
 
Экскурсия по Flutter SDK
Экскурсия по Flutter SDKЭкскурсия по Flutter SDK
Экскурсия по Flutter SDK
 
Java. Generic - шаблонные типы.
Java.  Generic - шаблонные типы.Java.  Generic - шаблонные типы.
Java. Generic - шаблонные типы.
 
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
 
[Expert Fridays] Java MeetUp - Борис Ташкулов (Teamlead Enterprise): "Почему ...
[Expert Fridays] Java MeetUp - Борис Ташкулов (Teamlead Enterprise): "Почему ...[Expert Fridays] Java MeetUp - Борис Ташкулов (Teamlead Enterprise): "Почему ...
[Expert Fridays] Java MeetUp - Борис Ташкулов (Teamlead Enterprise): "Почему ...
 

наследование

  • 1.
  • 2. • Основы наследования • Доступ к членам класса и наследование • Конструкторы и наследование • Наследование и сокрытие имен • Создание многоуровневой иерархии • Виртуальные методы и их переопределение • Использование ключевого слова sealed для предотвращения наследования • Использование абстрактных классов • Класс object •
  • 3. • Базовый класс (суперклассом) • Производный класс (подклассом) class Triangle : TwoDShape { //описание класса Triangle … }
  • 4. Члены класса могут быть объявлены как: • Private • Protected • Public
  • 5. Как базовые, так и производные классы могут иметь собственные конструкторы. 1. имя_пр_класса переменная = new имя_пр_класса () 2.Конструктор_производного_класса(список_параметров) :base(список_аргументов) { // тело конструктора }
  • 6. Для сокрытия имен используется: • ключевое слово new • ключевое слово base Формат записи: base.член
  • 7. • Например, из трех классов (TwoDShape, Triangle и ColorTriangle) ColorTriangle может быть производным от Triangle который, в свою очередь, может быть производным от TwoDShape. TwoDShape. Triangle ColorTriangle
  • 8. class TwoDShape { protected double width; // Защищенный член protected double height; // Защищенный член public TwoDShape() { width = height = 0.0; } // Конструктор по умолчанию. public TwoDShape(double w, double h) { width = w; height = h; } /// Конструктор класса TwoDShape. public TwoDShape(double x) { width = height = x; } // / Конструктор, создающий объекты, у которых ширина равна высоте. public double Width { get { return width; } set { width = value; } } // Свойства width и height. public double Height { get { return height; } set { height = value; } } public string showDim(){ return "Ширина и высота равны: " + width + " и "+height;} } // Класс треугольников, производный от класса TwoDShape. class Triangle : TwoDShape{ protected string style; // Защищенный член. public Triangle() { style = "null"; } // Конструктор по умолчанию – вызывает конструктор по умолчании класса TwoDShape public Triangle(string s, double w, double h) : base(w, h) { style = s; }// Конструктор с параметрами. public Triangle(double x) : base(x) { style = "равнобедренный"; }// Создаем равнобедренный треугольник. public double area() { return width * height / 2; }// Метод возвращает значение площади треугольника. public string showStyle() { return "Треугольник: " + style; } // Метод отображает тип треугольника. } class ColorTriangle : Triangle { string color; public ColorTriangle(string c, string s, double w, double h) : base(s, w, h) { color = c; } // Метод отображает цвет треугольника. public string showColor() { return "Цвет: " + color; } }
  • 9. • Чтобы объявить метод в базовом классе виртуальным, его объявление необходимо предварить ключевым словом virtual. • При переопределении виртуального метода в производном классе используется модификатор override. // Создаем виртуальный метод в базовом классе. public virtual void Show() { Console.WriteLine("Метод Show() в классе Base."); }
  • 10. Абстрактный класс создается с помощью модификатора типа abstract abstract class имя класса { // Защищенный члены // Конструктор по умолчанию. // Конструктор с параметрами. // Обычные методы // абстрактные методы } • Для объявления абстрактного метода используйте следующий формат записи. abstract тип имя(список_параметров);
  • 11. abstract class TWODShape { protected double width; // Защищенный член protected double height; // Защищенный член protected string name; // Защищенный член public TWODShape() { width = height = 0.0; name = "null"; } // Конструктор по умолчанию public TWODShape(double w, double h, string n) { width = w; height = h; name = n; } // Конструктор с параметрами. public TWODShape(double w, double h, string n) { width = w; height = h; name = n; } public TWODShape(double x, string n) { width = height = x; name = n; } // Создаем объект, у которого ширина равна высоте. public TWODShape(TWODShape ob) { // Создаем объект из объекта. width = ob.width; height = ob.height; name = ob.name; } // Свойства width, height и name. public double Width { get { return width; } set { width = value; } } public double Height { get { return height; } set { height = value; } } public string Name { get { return name; } set { name = value; } } public string showDim() { return "Ширина и высота равны "+width + " и " + height; } // Теперь методы area() и showStyle() абстрактные public abstract double area(); public abstract string showStyle();
  • 12. } // Класс треугольников, производный от класса TwoDShape. class TriAngle : TWODShape { protected string style; // Защищенный член public TriAngle() { style = "null"; } // Конструктор по умолчанию. . public TriAngle(string s, double w, double h) : base(w, h, "треугольник") { style = s; } //Конструктор с параметрами public TriAngle(double x) : base(x, "треугольник") { style = "равнобедренный"; } // Создаем равнобедренный треугольник public TriAngle(TriAngle ob) : base(ob) { style = ob.style; } // Создаем объект из объекта. public override double area() { return width * height / 2; } Переопределяем метод area() для класса Triangle. public override string showStyle() { return "Треугольник " + style; } // Отображаем тип треугольника. } // Класс прямоугольников, производный от класса TwoDShape. class Rectangle : TWODShape { public Rectangle(double w, double h) : base(w, h, "прямоугольник") { } // Конструктор с параметрами public Rectangle(double x) : base(x, "прямоугольник") { } // Создаем квадрат. public Rectangle(Rectangle ob) : base(ob) { } // Создаем объект из объекта. public bool isSquare() { if (width == height) return true; return false; } // Метод возвращает значение true, если прямоугольник является квадратом. public override double area() { return width * height; } // Переопределяем метод area() для класса Rectangle public override string showStyle() { return ""; } }
  • 13. • Sealed • пример sealed-класса. sealed class А { // ... }
  • 14. public static bool • Определяет, является ли объект оb1 Equals(object ob1, таким же, как объект оb2 object ob2) protected object • Выполняет "поверхностное копирование" объекта, т.е. копируются MemberwiseClone( члены, но не объекты, на которые ) ссылаются эти члены public Type • Получает тип объекта во время GetType() выполнения программы