今天吉祥知识就给我们广大朋友来聊聊抽象方法的实现,以下关于观点希望能帮助到您找到想要的答案。
- 1、抽象方法必须在子类中实现,这句话对吗?
- 2、C# 接口interface、Virtual方法(虚方法)、Abstract方法(抽象方法)
- 3、抽象方法是一种仅有方法头声明,方法体为一对空的花括号的方法。( )
- 4、普通类和抽象类有哪些区别
- 5、c#抽象类内是否要有方法的实现
多个答案解析导航:
抽象方法必须在子类中实现,这句话对吗?
答抽象方法必须在子类中实现,这句话正确。
当一个方法为抽象方法时,意味着这个方法应该被子类的方法所重写,否则其子类的该方法仍然是abstract的,这个子类由于继承父类,拥有抽象方法,因此它也是抽象类,即声明为abstract。
abstract抽象类不能用new实例化对象,abstract方法只允许声明不能实现。如果一个类中含有abstract方法,那么这个类必须用abstract来修饰,当然abstract类也可以没有abstract方法。 一个抽象类里面没有一个抽象方法可用来禁止产生这种类的对象。
java中的抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。
扩展资料
抽象方法具有以下特性:
1、抽象方法是隐式的 virtual 方法。
2、只允许在抽象类中使用抽象方法声明。
3、因为抽象方法声明不提供实实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如: public abstract void MyMethod();
4、抽象类必须为所有接口成员提供实现。
有关抽象类和抽象方法的问题:
a. 一个抽象类可以同时包含抽象方法和非抽象方法。
b. 抽象方法的目的在于指定派生类必须实现与这一方法关联的行为。
c. 抽象方法只在派生类中真正实现,这表明抽象方法只存放函数原型(方法的返回类型,使用的名称及参数),而不涉及主体代码。
参考资料来源:百度百科-抽象方法
C# 接口interface、Virtual方法(虚方法)、Abstract方法(抽象方法)
答一、Virtual方法(虚方法)
virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况:
情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。
情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。
二、Abstract方法(抽象方法)
abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现。
1、接口interface
public interface IPerson
{
void getName2(string s);//不包含方法主体
object getName4();//不包含方法主体
}
public class Chinese : IPerson
{
public void getName2( string s)
{
}
public string getName3()
{
return "111";
}
public object getName4()
{
return (object)"11";
}
}
//接口IPerson中方法不能用public abstract static 等修饰,无字段变量,无构造函数。
//类Chinese 必须实现 IPerson中的各个方法
2、abstract:声明抽象类、抽象方法
1.抽象方法所在类必须为抽象类
2.抽象类不能直接实例化,必须由其派生类实现。
3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟interface中的方法类似。
public abstract class Book2
{
public Book2()
{
}
public abstract void getPrice(); //抽象方法,不含主体
public virtual void getName() //虚方法,可覆盖
{
MessageBox.Show("this is a test:virtual getName()");
}
public virtual void getContent() //虚方法,可覆盖
{
MessageBox.Show("this is a test:virtual getContent()");
}
public void getDate() //一般方法,若在派生类中重写,须使用new关键字
{
MessageBox.Show("this is a test: void getDate()");
}
}
public class JavaBook2 : Book2
{
public override void getPrice() //实现抽象方法,必须实现
{
MessageBox.Show("this is a test:JavaBook2 override abstract getPrice()");
}
public override void getName() //覆盖原方法,不是必须的
{
MessageBox.Show("this is a test:JavaBook2 override virtual getName()");
}
}
3、virtual:标记方法为虚方法
1.可在派生类中以override覆盖此方法
2.不覆盖也可由对象调用
3.无此标记的方法(也无其他标记),重写时需用new隐藏原方法
abstract 与virtual : 方法重写时都使用 override 关键字
接口定义以大写字母I开头。方法只定义其名称,在C#中,方法默认是公有方法;用public修饰方法是不允许的,否则会出现编译错误;接口可以从别的接口继承,如果是继承多个接口,则父接口列表用逗号间隔。
接口可以通过类来实现,当类的基列表同时包含基类和接口时,列表中首先出现的是基类;类必须要实现其抽象方法;
抽象方法是一种仅有方法头声明,方法体为一对空的花括号的方法。( )
答抽象方法是一种仅有方法头声明,方法体为一对空的花括号的方法,是对的。
抽象方法是一种在类中声明的方法,它只有方法头声明,而没有方法体。它的定义形式为:方法名(参数列表)。
抽象方法是一种占位符,它表示一个方法应该被实现,但具体的实现细节由子类来提供。由于抽象方法没有方法体,因此它不能直接被调用。它只能被继承的子类实现或重写。
抽象方法在面向对象编程中非常有用。它使得父类可以定义一组通用的行为或操作,而将具体的实现留给子类。这种设计方式使得代码更加灵活和可扩展。
例如,假设我们有一个抽象类动物,其中包含一个抽象方法发出声音。我们知道所有的动物都会发出声音,但每种动物发出的声音是不同的。我们可以将发出声音定义为抽象方法,由每种动物自己的子类来实现。这样,每个子类都可以根据自己的特点来实现这个方法,使得代码更加灵活和可重用。
抽象方法的作用:
1、强制子类实现特定操作:抽象方法是一种规定子类必须实现的方法,从而通过这种方式强制子类实现某些功能,确保子类具有某些特定的行为。这种方式可以提高代码的规范性和可靠性。
2、实现多态性:抽象方法和抽象类支持多态性,即不同的子类可以通过实现相同的抽象方法来实现不同的功能。这种方式可以提高代码的扩展性和灵活性,使得代码更加易于维护和修改。
3、提高代码复用性:通过继承抽象类和实现抽象方法,子类可以重用父类的代码,避免重复编写相同的代码,提高代码的利用率和可维护性。
4、隐藏实现细节:抽象类可以隐藏具体实现的细节,只提供一个通用的接口给子类使用。这种方式可以降低类之间的耦合度,提高代码的可读性和可维护性。
5、定义接口:抽象方法可以用来定义接口,规定具有相似行为或属性的类的共同特征。这种方式可以使得代码更加模块化和可扩展,便于维护和修改。
普通类和抽象类有哪些区别
答普通类和抽象类的区别是:实例化、抽象方法、继承和多态。
1、实例化:普通类可以被实例化,即创建具体的对象。当我们创建一个普通类对象时,会为该类的所有成员变量分配内存,并调用构造函数初始化这些变量。抽象类不能被实例化。抽象类是一种特殊的类,它包含一个或多个抽象方法。抽象方法是没有具体实现的方法,只定义了方法的签名。
2、抽象方法:普通类可以包含普通的方法,这些方法可以有具体的实现。普通方法定义了如何处理数据,并可以访问类的成员变量和调用其他方法。抽象类包含一个或多个抽象方法。抽象方法是没有具体实现的方法,只定义了方法的签名。子类必须提供抽象方法的具体实现。
3、继承和多态:普通类可以被其他类继承,子类可以重写父类的方法,实现多态。多态是指子类可以根据需要提供不同的方法实现,使得子类对象可以当作父类对象使用。抽象类不能被继承,但可以被子类实现。子类必须提供抽象类中定义的所有抽象方法的具体实现。
抽象类的特点:
1、抽象方法:抽象类中可以包含一个或多个抽象方法。抽象方法是没有具体实现的方法,只定义了方法的签名。子类必须提供抽象方法的具体实现,否则子类也必须声明为抽象类。这使得抽象类可以用于定义一组共享的基本行为,而子类可以根据需要提供具体的实现。
2、不能被实例化:抽象类不能被实例化,即不能创建具体的对象。这是因为抽象类包含一个或多个抽象方法,没有提供具体的实现。当我们尝试创建抽象类对象时,会抛出一个异常。
3、继承限制:抽象类不能被其他类继承,但可以被子类实现。子类必须提供抽象类中定义的所有抽象方法的具体实现,否则子类也必须声明为抽象类。这使得抽象类可以用于定义一组共享的基本行为,而子类必须提供具体的实现。
4、多态:由于抽象类可以定义抽象方法,子类可以根据需要提供不同的方法实现,使得子类对象可以当作父类对象使用。这实现了多态,提高了代码的复用性和灵活性。
5、构造函数限制:抽象类必须包含一个构造函数,用于初始化抽象类中的成员变量。这是因为抽象类不能被实例化,所以必须提供一个构造函数来初始化其成员变量。
内容参考:百度百科-抽象类
c#抽象类内是否要有方法的实现
答定义抽象类和抽象方法:
abstract
抽象类特点:
1、不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们的实例
2、一个抽象类可以包含抽象和非抽象方法,当一个类继承于抽象类,那么这个派生类必须实现所有的的基类抽象方法
3、通过声明派生类也为抽象,我们可以避免所有或特定的虚方法的实现,这就是抽象类的部分实现
4、一个抽象类能够继承另一个非抽象类,另外,继承了基类的方法,添加新的抽象和非抽象方法是可行的
5、一个抽象类也能从一个接口来实现,这种情况,我们必须为所有的方法提供方法体,这些方法是来自接口
6、一个抽象类必须为所有的接口成员提供实现,一个用于实现接口的抽象类可能把接口方法安排到抽象方法上
抽象方法特点:
1、abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现
2、一个抽象方法可以看作是一个虚函数,抽象方法的声明只能在抽象类中
3、抽象方法声明只提供一个无实现的方式,没有方法体
4、方法体的实现被覆写方法提供,覆写方法是一个非抽象类的成员
5、抽象属性的行为和抽象方法相像,除了不同的声明形式
6、在一个静态属性中使用abstract 是一个错误
7、一个抽象属性能够通过派生类使用 override 实现
Virtual 用于定义虚方法:
virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况
1、在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法
2、在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法
从上文,大家可以得知关于抽象方法的实现的一些信息,相信看完本文的你,已经知道怎么做了,吉祥知识希望这篇文章对大家有帮助。