Skip to content

Commit 1e96ae8

Browse files
committed
book(исправление): change abstract class field initialization.
change abstract class field initialization.
1 parent d19f8c8 commit 1e96ae8

File tree

1 file changed

+3
-22
lines changed
  • book/ru/chapters/025.(Классы) Абстрактные классы (abstract classes)

1 file changed

+3
-22
lines changed

book/ru/chapters/025.(Классы) Абстрактные классы (abstract classes)/content.md

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ let v1: SuperAbstractClass = new SubStandardClass(); // Ok
3636
let v2: SubStandardClass = new SubStandardClass(); // Ok
3737
`````
3838

39-
Абстрактные классы могут содержать абстрактные члены, принадлежность к которым указывается с помощью ключевого слова `abstract`. Ключевое слово `abstract` можно применить к полям, свойствам (аксессоры) и методам абстрактного класса. При этом свойства и методы не должны иметь реализацию. В отличие от них, полям, помеченным как абстрактные, может быть присвоено значение по умолчанию.
39+
Абстрактные классы могут содержать абстрактные члены, принадлежность к которым указывается с помощью ключевого слова `abstract`. Ключевое слово `abstract` можно применить к полям, свойствам (аксессоры) и методам абстрактного класса. При этом абстрактные члены не должны иметь реализацию.
4040

4141
`````ts
4242
abstract class Identifier {
43-
public abstract field: string = 'default value'; // реализация допустима
43+
public abstract field: string; // инициализация не допустима
4444
public abstract get prop(): string; // реализация не допустима
4545
public abstract set prop(value: string); // реализация не допустима
4646

@@ -64,25 +64,6 @@ class SubConcreteClass extends SubAbstractClass { // конкретный под
6464
class SubSubConcreteClass extends SubConcreteClass {} // ... если они не были переопределены в классах-предках
6565
`````
6666

67-
Как было сказано ранее, абстрактным полям может быть задано значение по умолчанию, но в этом случае обратится к нему могут только абстрактные классы в иерархии наследования.
68-
69-
`````ts
70-
abstract class SuperAbstractClass {
71-
public abstract field0: string = 'default value'; // объявление абстрактного поля со значением по-умолчанию
72-
public abstract field1: string;
73-
public abstract field2: string;
74-
}
75-
76-
abstract class SubAbstractClass extends SuperAbstractClass {
77-
public field1: string = this.field0; // переопределение абстрактного поля и инициализация его значением абстрактного поля, которому было присвоено значение по умолчанию в абстрактном предке
78-
}
79-
80-
class SubOnCreteClass extends SubAbstractClass {
81-
public field0: string; // конкретному классу необходимо переопределить два абстрактных поля, так как в предках был переопределен только один член
82-
public field2: string;
83-
}
84-
`````
85-
8667
Абстрактные члены в полной мере удовлетворяют всем условиям реализации интерфейса. Другими словами, абстрактный класс, декларирующий реализацию интерфейса, может не реализовывать его члены, а лишь пометить их как абстрактные, тем самым переложить реализацию на своих потомков.
8768

8869
`````ts
@@ -103,7 +84,7 @@ abstract class AbstractSuperClass implements IInterface { // абстрактн
10384

10485
`````ts
10586
abstract class AbstractSuperClass {
106-
abstract name: string = "AbstractSuperClass";
87+
abstract name: string;
10788

10889
public toString(): string {
10990
// реализация общего не абстрактного метода

0 commit comments

Comments
 (0)