What will be the output of the following dart code? implements vs extends — difference between using it in class constructors and methods
#dart#oops#extends#implements#inheritance#interface#constructor
Answer
The Code
dartmain() { B b = B(); D d = D(); } class A { A() { print("Class A"); } sampleMethodOfClassA() { print('Sample Method Of Class A'); } } class B extends A { B() { print("Class B"); } } class C { C() { print("Class C"); } sampleMethodOfClassC() { print('Sample Method Of Class C'); } } class D implements C { D() { print("Class D"); } }
Answer
This code will not compile. Class
text
Dtext
implements Ctext
Dtext
Ctext
sampleMethodOfClassC()text
DWhy Does textB
Work But textD
Doesn't?
text
Btext
Dtextextends
(Inheritance) — Class B
text
extendsWhen
text
B extends A- B inherits all methods from A (including )text
sampleMethodOfClassA() - The parent constructor is called automatically before the child constructor
- B does not need to override inherited methods
dartB b = B(); // Output: // Class A ← Parent constructor called first // Class B ← Then child constructor
textimplements
(Interface Contract) — Class D
text
implementsWhen
text
D implements C- D treats C as an interface — it promises to provide the same API
- D must override every single method from C (even concrete ones)
- The parent constructor is NOT called
- D gets no inherited implementation — only the contract
dart// ❌ Compile Error: D has no implementation of sampleMethodOfClassC() class D implements C { D() { print("Class D"); } }
How to Fix Class D
dartclass D implements C { D() { print("Class D"); } sampleMethodOfClassC() { print('Sample Method Of Class C from D'); } }
Output After Fix
textClass A Class B Class D
Note:
is never printed becausetext"Class C"does not invoke the parent constructor.textimplements
Key Differences: textextends
vs textimplements
text
extendstext
implements| Feature | text | text |
|---|---|---|
| Parent constructor called? | Yes (automatically) | No |
| Inherits method implementations? | Yes | No |
| Must override all methods? | Only abstract methods | All methods (abstract + concrete) |
| Relationship | "is-a" (inheritance) | Interface contract |
| Multiple allowed? | Single class only | Multiple classes |
| Code reuse? | Yes | No (must rewrite everything) |
Common Interview Follow-Up
dart// extends → inherits body, only override what you want class B extends A { // sampleMethodOfClassA() is inherited — no need to override } // implements → must provide ALL methods yourself class D implements C { sampleMethodOfClassC() { // Must write your own implementation } }
Key Takeaway: Use
when you want to reuse a parent class's code. Usetextextendswhen you want to guarantee a class follows a specific API contract without inheriting any implementation.textimplements