void main() {
// Polymorphism
Employee e1 = Developer(10);
Employee e2 = Developer(20);
Employee e3 = Manager(30);
Employee e4 = Manager(40);
List<Employee> organization = [e1,e2,e3,e4];
for(var employee in organization) {
print(employee.salary(20));
}
}
class Employee {
int dayworked;
int salary(int perDaywage) {
return (this.dayworked * perDaywage);
}
Employee(this.dayworked);
}
// Developer Class
class Developer extends Employee {
@override
int salary (int perDaywage){
return (this.dayworked*perDaywage+80);
}
Developer(int dayworked):super(dayworked);
}
// Manager Class
class Manager extends Employee {
@override
int salary (int perDaywage){
return (this.dayworked*perDaywage+30);
}
Manager(int dayworked):super(dayworked);
}
Polymorphic arguments
void main() {
// Polymorphism => Polymorphic argument
int calsalary(Employee employee){
return employee.salary(20);
}
print(calsalary(Manager(10)));
}
class Employee {
int dayworked;
int salary(int perDaywage) {
return (this.dayworked * perDaywage);
}
Employee(this.dayworked);
}
// Developer Class
class Developer extends Employee {
@override
int salary (int perDaywage){
return (this.dayworked*perDaywage+80);
}
Developer(int dayworked):super(dayworked);
}
// Manager Class
class Manager extends Employee {
@override
int salary (int perDaywage){
return (this.dayworked*perDaywage+30);
}
Manager(int dayworked):super(dayworked);
}
As Dart has type inference , if you don't explicitly write the datatype , you won't notice how polymorphism is working . For this reason all the codes in this section has explicit datatype . If you take advantage of "type inference" , the polymorphism will still exits , but will seem less "magical"