为什么我们使用抽象方法,因为如果我们声明了抽象类,那么我们必须在派生类中实现该方法,这会造成两倍的麻烦,那么为什么我们不使用简单方法而不是抽象方法????
4 回答
abstract class Animal
{
abstract public void Voice(); //
}
class Dog : Animal
{
public void Voice()
{
Console.WriteLine("bark!");
}
}
class Cat: Animal
{
public void Voice()
{
Console.WriteLine("meow!");
}
}
看看抽象方法 Voice。如果你想象它是抽象动物的声音,它应该是什么?
抽象方法只允许在抽象类中声明,这意味着实现抽象类的类必须实现抽象方法,而抽象类中的任何其他方法都可以被覆盖或按原样使用。
• 抽象方法声明只允许在抽象类中。
• 因为抽象方法声明没有提供实际的实现,所以没有方法体;方法声明仅以分号结尾,签名后没有大括号 ({ })。该实现由覆盖方法override (C# Reference)提供,该方法是非抽象类的成员。
abstract class A{
abstract void method1();
void method2(){
//implementation
}
}
class B extends A{
public void method1(){
// implementation
}
}
class C extends A{
public void method1(){
// implementation
}
}
假设 B 和 C 是 A 的两个子类,它们有一个共同的方法 method2,但有一个不同的方法 method1。所以你可以在两个类中扩展 A 。有共同的方法将被自动继承。在那里,您可以通过在子类中实现 method1 来定义自己的行为。
通过创建一个包含许多子类来实现抽象行为并维护抽象超类的契约的抽象类,您可以编写与对象的编码实现无关的方法,只需知道它会按照指示执行。不同的子类可以从不同的来源获取数据,针对不同的事物进行优化,具有不同的副作用等
如果您正在学习面向对象编程的学校课程,那么可能像我一样,您学到的任何原理都没有意义 - 因为在小程序中,并且为了使编程示例易于消化,它们必须很小,OOP 通常只是添加包袱和样板. 但是您的程序越大,可重用性越高,它们必须在不同的上下文中越有用,它们必须做和正确做的事情就越大、越宏大、越广,OOP 技术就越能简化编码和思考代码的过程。