自己总结的,求找错
抽象方法与虚方法与普通方法:
1 抽象方法必须没有方法体 虚方法必须有方法体 普通方法必须有方法体
2 抽象方法必须被派生类中的方法实现
虚方法可以被派生类中的方法重写也可以不重写直接被使用
普通方法一定不能被派生类重写
3 抽象方法也可以重写父类中的虚方法
1 都不能直接实例化
2 抽象类中的抽象方法必须全部被实现 接口中的所有方法必须全部被实现
3 抽象类中可以有非抽象的方法,此方法子类可以直接引用 接口中不可以有自身实现的方法
------解决方案--------------------我的认识:
1、和你相同
2、有点不同:普通方法也可以被派生类重写,只是不能使用override关键字。
3、没理解你的意思。
后面:
1、方法不存在实例化的可能,类才能实例化为对象。
2、“必须被全部实现”是指的什么?抽象方法本身被定义就是不打算在这里实现的。
------解决方案--------------------如果一个类继承了一个抽象类或接口,但只实现了部分抽象类或接口里面的抽象方法。那么这个类只能定义成一个抽象类,因为有些继承过来的抽象方法它没有实现。
但如果你要定义一个非抽象的类,那么就必须实现其继承过来的所有的抽象方法。
所以并不是说,只要我 继承了抽象类或接口就必须将其所有抽象成员实现,这要看情况的。
看你的描述,理解的应该差不多了,但还不够透彻。
关键要理解呀,不能靠记忆。
------解决方案--------------------抽象方法与虚方法与普通方法:
1 抽象方法必须没有方法体 虚方法必须有方法体 //虚方法必须[可有可无]方法体
2 抽象方法必须被派生类中的方法实现 [当派生类不是抽象类时: 抽象方法必须被派生类中的方法实现,否则可实现也可不实现 ]
虚方法可以被派生类中的方法重写也可以不重写直接被使用 [正确]
普通方法一定不能被派生类重写 [可以用 new 关键字重写]
3 抽象方法也可以重写父类中的虚方法 [不知你的意思,]
1 都不能直接实例化[只有 抽象类 才是]
2 抽象类中的抽象方法必须全部被实现 接口中的所有方法必须全部被实现 [如果这个类也是 抽象类 就可能不去实现]
3 抽象类中可以有非抽象的方法,此方法子类可以直接引用 接口中不可以有自身实现的方法
[正确,接口只是一个规定,规定哪个类 用这些方法,如果说类 A 实现 接口 I ,意思是说,I 接口中的规定,A中要去实现,类A 达到了接口I 所有规定 ]
------解决方案--------------------补充一下:
接口:
接口只是一个规定,
规定哪个类 有这个接口定义的方法,
比如:
如果说类 A 实现 接口 I ,
意思是说:“I 接口中的规定,A类要去实现”,
------解决方案--------------------如果说 类A 类B 都实现接口I;
如:
public class A():I
{ ...
}
public class B():I
{ ...
}
A a = new A();
B b = new B();//
//可以下面的用法,
I i;
i= a;//把接口 I 的规定, 接口当成是类来用,但这个接口类 的实现体 在A类中。
i= b; //此时 i 接口 的实现体 变成了 B 类 中的现实体,//我们可以把这种方法叫做投胎换骨。
------解决方案--------------------楼上的几位大神,new 不叫重写,叫覆盖或者隐藏。
麻烦别乱说好吗???
new 和 Override 是有区别的。
http://apps.hi.baidu.com/share/detail/20636236
------解决方案--------------------1.虚方法的方法体真的可有可无吗?
虚方法和普通方法一样,必须要有方法体,只不过在父类中定义的虚方法可以在子类中重写,重写时加上override关键字。
2.普通方法用派生类中的方法重写,new如何使用?
子类对父类相同的方法除了可以重写外,还可以使用new关键字对父类方法进行隐藏。至于隐藏和重写的区别,你可以看:http://topic.csdn.net/u/20120312/14/9ee753d4-61da-4b1c-981a-d4323fc61535.html
3.我上面第三条讲的是抽象类中的抽象方法,也可以“覆盖”其父类的虚方法,其父类可以是抽象类也可以不是抽象类,这下讲明白了吧。
这个我没有试过,用抽象子类重写父类的虚方法。但是由于抽象子类不能实例化,所以是这个没有意义的。只有在抽象子类的子类中再次重写才有用。
4.这一条望各个大侠一起帮忙,就是之所以会有抽象方法,虚方法,普通方法之分,它的设计思路是什么,各中类型会在执行什么操作时用到啊。
抽象方法:定义一个功能,父类只是定义要求有这样一个功能,但是具体功能的实现将,必须由子类完成。
普通方法:实现一个功能。该功能子类不可修改。
虚方法:实现功能的模板,可以通知子类,现在我实现了这样一个功能,但是你(子类)可以按照自己的方式实现相同的功能。
------解决方案--------------------多看看MSDN,别听网上一些人胡说八道。
http://msdn.microsoft.com/zh-cn/library/9fkccyh4.aspx