Abstract class:
- cannot be instantiated.
- is a special type of class in which you can have members without implementation.
- as we know in C#/VB/Java, a class can only inherit from 1 class. This also applies for Abstract Class.
- normally used for framework-type library classes: providing default behavior for some of its class members, but forcing the developer to implement others.
- is believed to be faster in Java,
- the aim: making sure something is *eventually* implemented.
- A class can inherit an abstract class without implementing all its abstract method.
However only a class that has all its method implemented can be instantiated to an object. - IS-A relationship.
- e.g. Student IS A Person, Employee IS A Person.
// 'framework library' for a person // a person can enrol and submit // however, the class that consume this framework library // need to provide 'where' the paperwork need to be sent public abstract Person { public abstract SendPaperWork(string paperwork) public void Enrol() { SendPaperWork("enrolment"); } public void Submit() { SendPaperWork("report"); } } // by inheriting Person abstract class // we are enabling student to enrol and submit // however, SendPaperWork need to be implemented // because we need to tell it explicitly 'where' // to send the enrolment/ submission public class Student : Person { public override SendPaperWork(string paperwork) { School.Send(paperwork); } } // an employee send the paperwork to a different 'place' than student public class Employee : Person { public override SendPaperWork(string paperwork) { Company.Send(paperwork); } }Interface:
- cannot be instantiated.
- is a special type of abstract class in which all the members do not have any implementations.
- enables polymorphism. A class can implement more than 1 Interfaces.
- normally used for application classes: providing contract for ensuring interactibility.
- the aim: making sure something is interchangeable.
- A class that implements an Interface need to contain all the implementation, otherwise the compiler will throw an error.
- CAN-DO relationship.
- e.g. Student CAN enrol, Student CAN submit assignment.
public interface ICanEnrol { void Enrol(); } public interface ICanSubmit { void Submit(); } public class Student : ICanEnrol, ICanSubmit { public void Enrol() { School.Send("enrolment"); } public void Submit() { School.Send("report"); } } public class Employee : ICanEnrol, ICanSubmit { public void Enrol() { Company.Send("enrolment"); } public void Submit() { Company.Send("report"); } } public class MailServer { public void SendAllSubmissions() { // AllSubmitters is a collection of students and employees foreach (ICanSubmit submitter in AllSubmitters) { // The MailServer does not care if // the submitter is a student // or an employee, as long as it can submit submitter.Submit() } } }
good and very useful for recollecting ..
ReplyDelete