using System;
//abstract can't be sealed - meaning contrast
public abstract class Customer
{
//can't have implementation
public abstract void Print();
}
public class Program : Customer //need to provide implementation for abstract method
//public abstract class Program : Customer
{
public override void Print() //override keyword
{
Console.WriteLine("Print Method");
}
public static void Main(string[] args)
{
Program P = new Program();
P.Print();
Customer C = new Program();
C.Print();
}
}
======================
differences between abstract class and interface
using System;
public abstract class Customer
{
//can have access-modifiers
//can have implementation
//can have fields
//can inherite from another classes
int id;
public void Print()
{
Console.WriteLine("Print");
}
}
public interface ICustomer
{
//can't have access-modifiers
//can't have implementation
//can't have fields
//can't inherite from another classes
void Print();
}
public class Program
{
public static void Main(string[] args)
{
}
}
=============================
avoid diamond problem
using System;
class A
{
public virtual void Print()
{
Console.WriteLine("A Implementation");
}
}
class B : A
{
public override void Print()
{
Console.WriteLine("B Implementation");
}
}
class C : A
{
public override void Print()
{
Console.WriteLine("C Implementation");
}
}
class D : B, C
{
}
//Diamond problem
//it's unclear to call B or C class
//ambiguity
class program
{
public static void Main()
{
D d = new D();
d.Print();
}
}