Dart
Dart의 class modifier 간단한 정리
붕어사랑 티스토리
2024. 8. 13. 15:55
반응형
매번 까먹어서 유튜브에서 아주 괜찮은 영상을 찾았다.
https://www.youtube.com/watch?v=n5WuBICxv_8
아래는 요약된 코드
abstract : 클래스 구현을 다 안해도 된다
base : implement를 막는다
interface : extends를 막는다
final : extends와 implements를 막는다
abstract interface : 다른 언어의 pure interface 만들때 사용
라이브러리 외부일경우
// NormalClass can be instantiated, extended, and implemented
final normalClass = NormalClass();
class Normall extends NormalClass {}
class Normal2 implements NormalClass {}
// AbstractClass can be extended and implemented. It can not be instantiated.
final abstractClass = AbstractClass (); -> 에러
class Abstractl extends AbstractClass {}
class Abstract2 implements AbstractClass {}
// BaseClass can-be constructed and extended. It can not be implemented.
final baseClass = BaseClass();
base class Basel extends BaseClass {}
base class Base2 implements BaseClass {} -> 에러
// InterfaceClass can be instantiated and implemented. It can not be extended.
final interfaceClass = InterfaceClass();
class Interfacel extends InterfaceClass{} -> 에러
class Interface2 implements InterfaceClass {}
// FinalClass can only be instantiated.
final finalClass = FinalClass();
final class Finall extends Finalclass{} -> 에러
final class Final2 implements Finalclass{} -> 에러
// MixinClass is similar to NormalClass except it can also be mixed using with • keyword.
final mixinClass = MixinClass();
class Mixin extends MixinClass {}
class Mixin2 implements MixinClass {}
class Mixin3 with MixinClass {}
// SealedClass can not be instantiated, extended, implemented, and mixed outside of its libr
final sealedClass = SealedClass(); -> 에러
class SealedClass1 extends SealedClass {} -> 에러
class SealedClass2 implements SealedClass {} -> 에러
class SealedClass3 with SealedClass {} -> 에러
라이브러리 내부일경우
/// InterfaceClass can be instantiated, extended, and implemented.
final interfaceClass = InterfaceClass();
class Interfacel extends InterfaceClass {}
class Interface2 implements InterfaceClass {}
/// FinalClass can be instantiated, extended, and implemented.
final finalClass = FinalClass();
base class Final1 extends FinalClass
base class Final2 implements FinalClass{}
/// MixinClass is similar to NormalClass except it can also be mixed using 'with' keyword
final mixinClass = MixinClass();
class Mixinl extends MixinClass{}
class Mixin2 implements MixinClass {}
class Mixin3 with MixinClass {}
/// SealedClass can be extended and implemented. It can not be instantiated.
final sealedClass = SealedClass(); -> 에러
class SealedClass1 extends SealedClass {}
class SealedClass2 implements SealedClass {}
외부와 내부일때 몹시 다르다 내부일경우 몹시 자유롭다.
mixin의 on 키워드
항상 헤깔리는데, on 키워드는 mixin의 상속이라고 생각하자.
mixin A on B 라고 하면 mixin A는 B와 관련된곳에만 쓸수 있다.
on이 붙으면 super를 이용해 b에 접근할 수 있다.
즉 B를 상속하거나 구현하는 클래스에만 with 으로 사용이 가능하다.
반응형