Nếu tôi có dự án có chứa các lớp tương tự và một số có thể sử dụng cùng một triển khai, nhưng trong hầu hết các trường hợp, chúng thực hiện cách xử lý các phương thức được xác định trong giao diện hoặc lớp trừu tượng. Tôi đang cố gắng tìm ra nếu một giao diện/lớp trừu tượng là tốt hơn hay không. Tôi không nhận được điểm của một giao diện nếu bạn chỉ có thể sử dụng một lớp trừu tượng với các phương thức trừu tượng ảo.Giao diện và lớp trừu tượng chỉ với các phương thức trừu tượng ảo có giống nhau không?
Dưới đây là một giao diện:
public interface IAthlete
{
void Run();
}
Dưới đây là một lớp trừu tượng:
public abstract class Athlete
{
public abstract void Run();
}
Đây là một thực hiện của giao diện:
public class Sprinter : IAthlete
{
public void Run()
{
Console.WriteLine("Running Fast....");
}
}
Đây là một phần mở rộng của lớp trừu tượng:
public class MarathonRunner : Athlete
{
public override void Run()
{
Console.Write("Jogging....");
}
}
Bây giờ nếu tôi quyết định thêm một phương thức gọi là Dừng hoặc giao diện hoặc phương pháp trừu tượng, Sprinter và MarathonRunner đều bị ngắt và vì tôi có thể cung cấp một số triển khai mặc định để trừu tượng, nó có vẻ là một lựa chọn tốt hơn. Tui bỏ lỡ điều gì vậy?
Tôi cho rằng chúng ta đang nói về Java ở đây. Sự khác biệt chính là trong Java, một lớp có thể thực hiện một số giao diện, nhưng chỉ có thể mở rộng một siêu lớp. Giao diện do đó linh hoạt hơn một chút. –
xin lỗi C#, tôi sẽ cập nhật thẻ. – Xaisoft
http://stackoverflow.com/questions/2308786/abstract-classes-and-interfaces-in-c/2308801#2308801 –