A. C#父类子类继承多态虚方法抽象方法
多态是指两个或多个属于不同类的对象,对于同一个消息(方法调用)作出不同响应的方式。实现多态的方式:一、抽象类和抽象方法 1、 抽象类的语法: 访问修饰符 abstrac class 类名 2、 父类中的方法: 访问修饰符 abstrac 返回类型 方法();注意:含有抽象方法的类必然是抽象类。抽象类中的方法并不一定都是抽象方法。 抽象类是不能被实例化的。只能通过它的子类来实现该类的方法,除非它的子类也是一个抽象类。 抽象类不能是密封或者静态的,抽象类被子类继承并实现它的抽象方法。 3、重写抽象方法: 访问修饰符 override 返回类型 方法() 4、使用场合: A 父类提供了一个功能或者规定,约束子类的行为。 示例:Code
abstract public class Person
{
abstract public void SayHi();
}//子类
public class Student:Person
{
public override void SayHi()
{
//代码省略
}
} public class Teacher:Person
{
public override void SayHi()
{
//代码省略
}
}二、虚方法: 访问修饰符 virtual 返回类型 方法() { //方法体 } 1、每个对象Object都有一个Equals()方法,用于确定两个实例对象是否相等,它是一个虚方法,可以重写这个方法。 public virtual bool Equals(Object obj) 默认情况下,Equals()方法只支持引用相等,也就是相比较的两个对象是否引用同一个对象。 重写Equals()虚方法如: public override bool Equals(object obj)
{
//将要比较的对象转换为当前类型
Student target = obj as Student; //如果为空、类型不同
if (target == null)
return false; if (target.name == this.name &&
target.gender == this.gender &&
target.age == this.age &&
target.hobby == this.hobby &&
target.popularity == this.popularity)
{
return true;
}
return false;
}
2、虚方法和抽象方法的区别: A、修饰的关键字不同 B、父类中方法体的区别 C、重写的区别(抽象方法必须override) D、抽象方法只能在抽象类中,而虚方法除了密封类外都可以写3、方法重写的条件: A、方法签名必须一样 B、访问修饰符允许被放大 C、返回类型必须一样 总结:面向对象的三大特征 封装:保证对象自身数据的完整性、安全性 继承:建立类之间的关系,实现代码复用、方便系统的扩展 多态:相同的方法调用可实现不同的实现方式三、方法重载 1、与重写方法的区别 A、应用场合不同:如果父类中有abstract/virtual,才能被重写,重写方法要求类与类之间是继承关系。 而重载没有过多的要求。四、方法隐藏:父类和子类的方法都存在。五、静态(satice)类/密封(sealed)类/抽象(abstract)类它们各自的特点:
B. c++类中的抽象,方法,接口,封装是什么意思请说的简单点
抽象:把现实的对象属性转化成数据映射到类上
方法:就是函数,对成员的一系列操作
封装:相当于一个
黑盒子
,用户不需要看到里面的东西
接口:基于封装,只留给用户使用的方法,这些方法就是接口
C. 什么是抽象类和抽象方法
抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract。 在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract。 抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。抽象类本身不具备实际的功能,只能用于派生其子类。抽象类中可以包含构造方法,但是构造方法不能被声明为抽象。 抽象类不能用final来修饰,即一个类不能既是最终类又是抽象类。 abstract不能与private、static、final、native并列修饰同一个方法。 程序举例:abstract class Animal //定义抽象类 abstract void eat(); //定义抽象方法}class Horse extends Animal //定义继承Animal的子类 void eat() //重写父类的抽象方法 }class Dog extends Animal void eat() }class test}运行结果: 马吃草料! 狗吃骨头! 如果帮助到您,请记得采纳为满意答案哈,谢谢!祝您生活愉快! vae.la
D. C#中的抽象方法和虚方法有什么区别
抽象方法是只有定义、没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写;虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖。
重写的子类虚函数就是被覆盖了。
E. 从C语言的角度来解释什么是抽象数据类型
简单的说一下吧,所谓抽象数据类型ADT,是指
我们在逻辑上定义的
一种
数据类型。
如你所知道的,计算机内,无论是内存还是外存,都只是一组二进制的数位而已。
大多数时候,比如我们所熟知的
Char类型、Int类型等等,都是一组已经定义好的二进制数位。
所谓定义好,是指,在这一组数位中,如Char类型,8位,即一组8个二进制数位,我们如何标识和处理每一位,以及解读每一位所代表的意义。
你学过C,应该知道ASCII码,和二进制计数。
Char的这个数据类型的含义就是说
以二进制计数
算出对应的数值,
再以ASCII码为标准,解读出这8位二进制位中所表示的字母。
事实上,我想说的是,这就是一个基本的抽象数据类型了。
当然,ADT不仅仅是一组数位的定义,他还包括一组定义在这个结构上的一组操作。
struct这个方法,在后来的演变中,成为了C++和其他高等语言中的类(class)。
我知道,这样讲你肯定不是很明白,但关于这个东西,有一门课程叫做《数据结构》,中间详细叙述了所有有关
抽象数据类型的概念
。
其中,有一本
《数据结构C语言版》清华大学出版社
严蔚敏着
的教材,是所有计算机专业学生必修的一门课程。你可以看看。
祝好运!
F. C++何为数据抽象呢请高手们帮忙详细回答一下
抽象有两种, 一种是数据抽象, 一种是行为抽象.
行为抽象是C++最重要的机制之一.
数据抽象:
int i = 5 ; // 你把5表示5个苹果, 5倍关系等等, 这就是数据抽象.
// 用数据去表示事物,概念,关系
行为抽象:
比如, 任何表现出迭代器行为的东西都是迭代器, 来自<<C++ standard library>>里的原话
所以vector<>::iterator是迭代器, list<>::iterator是迭代器, 指针int* p也是迭代器
迭代器有哪些行为?
有解引用操作, 如*iter = 10,
有成员访问操作 iter->func(),
有递增操作 ++iter
所以只要你定义一个类, 支持上述操作, 你的类就是一个迭代器, 如果你的类同时又具有容器的行为, 你的类也可以叫做容器. 当然这种异型不太可能生存在有意义的软件环境中.
在C++中行为抽象一般有两种实现机制:
在面向对象的编程中, 使用接口
通常定义一个抽象类作为接口, 比如 class shape{ virtual void draw() ;}
任何继承该接口的子类, 都强制性的具有draw()行为, 所以任何子类都可叫做shape
在泛型编程中, 通常使用策略
策略是隐式接口, 在C/C++其实就等于convention(约定), 比如我们约定变量i开头表示int类型
template< typename T>
void draw( const T& sp )
{
sp.draw() ; // 由于策略是隐式的, 只要求T具有draw()行为, 而不要求T之间有任何继承关系
}
抽象 = 提取共性, 忽略无关
所以
class polymorph
{
void draw() ; // polymorth是一个shape, 因为图形的行为共性是draw()
// 图形或许还有move(), scale()行为, 但是在这里我们忽略掉, 对我们不重要
void drive() ; // polymorth是一部汽车, 因为汽车的行为共性是drive()
// 汽车还有stop(),但是...
} ;