рдХрдИ рдмрд╛рд░ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рд╕реЗ рдПрдХ рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбрд╛рд░реНрдЯ рднрд╛рд╖рд╛ рдореЗрдВ рдорд┐рдХреНрд╕рд┐рдиреНрд╕ (рдЕрд╢реБрджреНрдзрд┐рдпрд╛рдБ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХреНрдпрд╛ рд╣реИред рд▓реЗрдЦреЛрдВ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдЬреЛ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рд░рд╛рд╕рдд рдпрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рднрд░рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИред
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдбрд╛рд░реНрдЯ рдФрд░ рдлрд╝реНрд▓рдЯрд░ рдореЗрдВ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рд▓реЗрдЦ рд╣реИрдВ, рд╡реЗ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╕реНрдкрд╖реНрдЯрддрд╛ рдирд╣реАрдВ рд▓рд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╢реБрджреНрдз рдпрд╛рдВрддреНрд░рд┐рдХреА рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдЪрд┐рдд рд╕реЗ рджреВрд░ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдорд┐рд▓рд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ:
class Animal {} class Dog {} class Cat {}
рдФрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╣рдо рдПрдХ рдЬрд╛рдирд╡рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдФрд░ рдХреБрддреНрддреЛрдВ рдХреЗ рдЧреБрдг рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
class CatDog extends Animal with Cat, Dog {}
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рджреЛ рдкреНрд░рд╢реНрди рд╣реИрдВ:
- рд╣рдореЗрдВ рдмрд┐рд▓реНрд▓реА рдФрд░ рдХреБрддреНрддреЗ рдХреЗ рдмреАрдЪ рдПрдХ рдХреНрд░реЙрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
- рдмрд┐рд▓реНрд▓реА рдФрд░ рдХреБрддреНрддреЗ рдХреЛ
Animal
рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ? рдХреНрдпрд╛ рд╡реЗ рдЬрд╛рдирд╡рд░ рдирд╣реАрдВ рд╣реИрдВ?
рдЙрд╕реА рд╕рдордп, рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЛ рдлрд┐рд░ рднреА рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рдпрд╣ рдПрдХ рд░рд╣рд╕реНрдп рдмрдирд╛ рд╣реБрдЖ рд╣реИред
рдореЗрд░реА рд╡рд┐рдирдореНрд░ рд░рд╛рдп рдореЗрдВ, рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЗ рдЕрд░реНрде рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╕рдВрдмрдВрдз рдХреЗ рд╕рд╛рде рдореБрджреНрджреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдУрдУрдкреА рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЗрдХрд╛рдИ рдХрд┐рд╕реА рдЕрдиреНрдп рдЗрдХрд╛рдИ рдХрд╛ рд░реВрдкрд╛рдВрддрд░ рд╣реИ ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдХреА рдПрдХ рднрд┐рдиреНрдирддрд╛ рд╣реИ
рдпрд╛
рдХреА рд╡рд┐рд╡рд┐рдзрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдареАрдХ рд╡рд╣реА рд╣реИ рдЬреЛ рдПрдХ рд╡рд░реНрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд╛рд░рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрджрд┐ рд╣рдо рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐
рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджреЗрддреА рд╣реИ, рдФрд░
рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджреЗрддреА рд╣реИред рдпрджрд┐ рдЖрдк рддрд░реНрдХ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рддреЛ, рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдЖрдк рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИрдВ ред
рдХрдИ рдХрдорд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрд╛рдзрд┐рдХ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреА рдЖрд▓реЛрдЪрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ ( рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рджреЗрдЦреЗрдВ), рдЗрд╕рд▓рд┐рдП рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ / рдпрд╛ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рдФрд░, рддрд░реНрдХ рдХреА рджреГрд╖реНрдЯрд┐ рд╕реЗ, рдХрдИ рд╡рд┐рд░рд╛рд╕рдд рд╕реЗ рдЙрддреНрдкрдиреНрди рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рдердорд┐рдХ рддрд░реНрдХ рд╕реЗ рдХреБрдЫ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдпрд╛рдж рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрд╡рд╢реНрдпрдХ рдФрд░ рдЧреИрд░-рдЖрд╡рд╢реНрдпрдХ рдЧреБрдгреЛрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ред рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдЧреБрдг рд╡реЗ рд╣реИрдВ рдЬрд┐рдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдЧреИрд░-рдЖрд╡рд╢реНрдпрдХ рдЧреБрдг рд╡реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐, рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд╕реНрддреБ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЖрдпрдд рдХрд╛ рдЖрдХрд╛рд░ рдЗрд╕ рдЖрдХреГрддрд┐ рдХрд╛ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдЧреБрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╣рдо рдЗрд╕ рдЖрдХреГрддрд┐ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ (рдПрдХ рдкрдХреНрд╖ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдХреЛрдг рдмрджрд▓рддреЗ рд╣реИрдВ), рддреЛ рдЖрдпрдд рдПрдХ рдЖрдпрдд рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЖрдпрдд рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдЖрдпрдд рдмрдирд╛ рд░рд╣реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЖрдпрд╛рдо рдПрдХ рдорд╣рддреНрд╡рд╣реАрди рд╕рдВрдкрддреНрддрд┐ рд╣реИрдВред
рдПрдХ рд╢реНрд░реЗрдгреА рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЖрдорддреМрд░ рдкрд░ рдореВрд▓ рд╡рд░реНрдЧ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЖрд╡рд╢реНрдпрдХ рдЧреБрдг рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
abstract class Shape { void draw(); } class Rectangle extends Shape { @override void draw() { print('Draw rectangle'); } } class Circle extends Shape { @override void draw() { print('Draw circle'); } }
рдЗрд╕ рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЖрдзрд╛рд░ рдЖрдХреГрддрд┐ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИред
рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг:
abstract class Widget { void render(); } class Container extends Widget { @override void render() { print('Renders container'); } } class Text extends Widget { @override void render('Render text'); }
рдпрд╣рд╛рдБ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдкрддреНрддрд┐ рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╣реИред
рдЕрдм рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ рдЕрдкрдиреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдореЗрдВ рдХреБрдЫ рдЧреИрд░-рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕реА рд╕рдВрдкрддреНрддрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рдВрдЧ рд╣реИред рдЖрдЗрдП рдЕрдм рд╣рдо рдХреБрдЫ рдЖрдХреГрддрд┐рдпреЛрдВ рдФрд░ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЛ рд░рдВрдЧреАрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ PaintableShape
рдФрд░ PaintableWidget
рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ PaintableWidget
ред рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рджреЛрдиреЛрдВ рдкрджрд╛рдиреБрдХреНрд░рдореЛрдВ рдореЗрдВ рд░рдВрдЧ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдирдХрд▓ рдХрд░рдиреА рд╣реЛрдЧреА, рдФрд░, рджреВрд╕рд░реА рдмрд╛рдд, рдкреНрд░рддреНрдпреЗрдХ рдЖрдХреГрддрд┐ рдФрд░ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ рд╣рдо рд░рдВрдЧ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдирдИ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, PaintableRect
рдФрд░ PaintableContainer
ред
рдЖрдк рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддрдм рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдорд┐рд▓рддрд╛ рд╣реИ:
enum Color {red, yellow, green} abstract class Paintable { void paint(Color color); Color get color; } class PaintableRect extends Rectangle implements Paintable { Color _color; @override void paint(Color color) {_color = color;} @override Color get color => _color; } class PaintableContainer extends Container implements Paintable { Color _color; @override void paint(Color color) {_color = color;} @override Color get color => _color; }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рднреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдЬрд╝реЙрд▓реНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдХреЛрдб рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд▓реЗрдХрд┐рди рдЗрди рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдПрдХ рдорд╣рддреНрд╡рд╣реАрди рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдЬреБрдбрд╝реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдорд┐рд╢реНрд░рдг (рдорд┐рдХреНрд╕рдЪрд░) рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдП:
enum Color {red, yellow, green} mixin PaintableMixin { Color _color; void paint(Color color) {_color = color;} Color get color => _color; } class PaintableRect extends Rectangle with PaintableMixin { @override void draw() { print('Draw rectangle with color $color'); } } class PaintableContainer extends Container with PaintableMixin { @override void render() { print('Render container with color $color'); } }
рдЕрдм рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
main() { PaintableRect() ..paint(Color.red) ..draw(); PaintableContainer() ..paint(Color.yellow) ..render(); }
рдЙрдкрд░реЛрдХреНрдд рдХреЛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдИ рднреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЛрдВ рд╕реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ: рдпрджрд┐ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рд╣реИрдВ рдЬреЛ рд╕рдорд╛рди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЗрди рдкрджрд╛рдиреБрдХреНрд░рдореЛрдВ рдХреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЧреИрд░-рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╛ рдпрд╣ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рдХреА рд╡рд┐рднрд┐рдиреНрди рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдлрд╝реНрд▓рдЯрд░ рдврд╛рдВрдЪреЗ рдХреЗ рд╡рд┐рдЬреЗрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдЙрд╕реА рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХреБрдЫ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕реНрдкрдВрджрди рдореЗрдВ рд╡рд┐рдЬреЗрдЯ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВ:
class MyStatelessWidget extends StatelessWidget {}
рдпрд╛
class MyStatefulWidget extends StatefulWidget {}
рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рджреЛ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
class StatelessWidgetWithProperty extends StatelessWidget {} class StatefulWidgetWithPropery extends StatefulWidget {}
рдЙрд╕реА рд╕рдордп, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдлрд┐рд░ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдирдХрд▓ рдХрд░рдиреА рд╣реЛрдЧреАред
рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ:
mixin Property {} class MyStatelessWidget extends StatelessWidget with Propery {} class MyStatefulWidget extends StatefulWidget with Property {}
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреНрд░рд┐рдЬ рдкреИрдЯрд░реНрди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧреБрдгреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдореЗрдВ рдорд┐рд╢реНрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдордирдорд╛рдирд╛ рд╕рдВрдпреЛрдЬрдиред
рдпрд╣ рд▓реЗрдЦ рд╕рдВрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рдВрднрд╡рддрдГ рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдкреВрдЫрддрд╛рдЫ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рджрд┐рдорд╛рдЧ рдЙрдирдХреЗ рд▓рд┐рдП рдХрдИ рдФрд░ рд╕реБрдВрджрд░ рдЙрдкрдпреЛрдЧ рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдХрд┐ рдЕрдЧрд░ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреЗ рд╡рд┐рдХрд▓реНрдк рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВред