当前位置:编程学习 > C#/ASP.NET >>

新手问有关“继承”问题

简单示例:
public class BaseC
{
}
public class DerivedC : BaseC
{
}

BaseC c = new DerivedC();   这句话该怎么理解啊?为什么声明一个基类却可以用派生类实例化c --------------------编程问答-------------------- 多态,

面向对象 --------------------编程问答-------------------- 这个不完全算是继承的问题。这设计到一个面向对象的概念:多态。

什么是多态,这个还是建议你去看书吧,先看书,有了自己的理解后再来CSDN问人,这样交流才有效率,你的收获才会更大,没有自己的想法直接就向别人问答案,是学不到东西的。

我这里和你说一句吧,多态-->  父类(也称基类)引用可以引用子类对象,父类引用只能调用子类继承自父类的方法。父类引用不能调用子类独有的方法,如果想调用子类独有的方法,必须将父类引用强制转化成子类的类型。

我就说这么多,你自己先看看书,看看概念,看看书上怎么说,再看我上面说的这段话吧。

多态的好处,初学者可能领会不到,慢慢就会知道的 --------------------编程问答-------------------- 只有基类类型可以使用子类类型的对象,继承才有意义。

比如
ArrayList 有个方法叫 Add(object)

你可以这么用:
ArrayList list = new ArrayList();
list.Add("hello");
list.Add("world");
你有没有想过,为什么ArrayList的Add方法可以传入字符串类型?

再比如:
Console.WriteLine(new BaseC());
为什么这句也是合法的? --------------------编程问答-------------------- 继承与多态,紧密结合啊,楼上说得不错。楼主先看一下书吧 --------------------编程问答-------------------- 我想说的意思是

lz不要为了面向对象而面向对象,也不用抠什么多态、继承这些词汇。

你应该明白,为什么要面向对象以及面向对象用来做什么。怎么做不是你考虑的。

比如,如果一个人问,为什么汽车没有人推就会跑啊?也许你不懂发动机的原理,但是还是觉得这个问题很可笑。汽车不能跑还是汽车么?

用汽车的人也不必关心为什么汽车能跑。 --------------------编程问答--------------------
引用 5 楼 caozhy 的回复:
我想说的意思是

lz不要为了面向对象而面向对象,也不用抠什么多态、继承这些词汇。

你应该明白,为什么要面向对象以及面向对象用来做什么。怎么做不是你考虑的。

比如,如果一个人问,为什么汽车没有人推就会跑啊?也许你不懂发动机的原理,但是还是觉得这个问题很可笑。汽车不能跑还是汽车么?

用汽车的人也不必关心为什么汽车能跑。

大大比喻不错,很能引导人,学习。 --------------------编程问答-------------------- 如果继承以后我们不能用基类型操作派生类型变量。

那么继承有什么用呢?怎么体现子类和父类的联系呢?

当然,继承使得子类获得父类的方法而不必再重写一遍。但是“include”一类的语法也能做到啊。 --------------------编程问答-------------------- 基类有的,派生类全有。当然派生类实例化出来的,就是基类了,只是比基类更多而已。
琢磨这些基本概念,确实更有助于掌握本质。 --------------------编程问答-------------------- dddddd --------------------编程问答-------------------- 不知道为啥大家老是说多态,貌似c#里面没有像c++里面那样的多态,因为支持多态会产生很多的负面影响,c#取消了多态。不过可以用接口来间接实现多态的特性 --------------------编程问答--------------------
引用 10 楼 li2422121715 的回复:
不知道为啥大家老是说多态,貌似c#里面没有像c++里面那样的多态,因为支持多态会产生很多的负面影响,c#取消了多态。不过可以用接口来间接实现多态的特性

又一个概念不清的人。

估计是把多态理解成多重继承了。 --------------------编程问答--------------------
引用 11 楼 caozhy 的回复:
引用 10 楼 li2422121715 的回复:
不知道为啥大家老是说多态,貌似c#里面没有像c++里面那样的多态,因为支持多态会产生很多的负面影响,c#取消了多态。不过可以用接口来间接实现多态的特性

又一个概念不清的人。

估计是把多态理解成多重继承了。

很有可能,他所说的是多重,所以阐述继承多个接口的解决思路 --------------------编程问答-------------------- 所以不要去理解这些玄虚的概念,比如“多态”。

很讽刺的是松本行弘说,他不知道什么是面向对象。 --------------------编程问答--------------------
引用 13 楼 caozhy 的回复:
所以不要去理解这些玄虚的概念,比如“多态”。

很讽刺的是松本行弘说,他不知道什么是面向对象。

就像很多人对人说不知道什么什么设计模式、依赖注入、AOP

而此类思想却在他的N个项目中延用了。。 --------------------编程问答-------------------- 如果你的老师这样教你:"电视机是黑白电视机,彩色电视机的基类",
请换一种思维模式,面向对象设计用到的概念是:按职责分类,
你可以把class当作是:拥有某种(类)职责的封装,

引用楼主 lihaipeng1224 的回复:
BaseC c = new DerivedC(); 这句话该怎么理解啊?为什么声明一个基类却可以用派生类实例化c

这句话表示:按照父类约定的职责,调用子类的实现
子类有可能直接继承了父类的实现,也有可能会有自己不同的实现 --------------------编程问答--------------------
引用 10 楼 li2422121715 的回复:
不知道为啥大家老是说多态,貌似c#里面没有像c++里面那样的多态,因为支持多态会产生很多的负面影响,c#取消了多态。不过可以用接口来间接实现多态的特性


OOAD的名词跟OOPL的名称不能混为一谈
OOAD说的多态是指:同一种外观,不同的实现,这种设计方法的实现往往通过某种隔离手段,比如:继承
就像,OOAD的接口和C#的接口也不是一回事,
数据库开发,业务逻辑,测试单元都是继承设计文档的接口,可是你不能用C#的接口去实现 --------------------编程问答--------------------
引用 16 楼 moneysoft 的回复:
引用 10 楼 li2422121715 的回复:
不知道为啥大家老是说多态,貌似c#里面没有像c++里面那样的多态,因为支持多态会产生很多的负面影响,c#取消了多态。不过可以用接口来间接实现多态的特性


OOAD的名词跟OOPL的名称不能混为一谈
OOAD说的多态是指:同一种外观,不同的实现,这种设计方法的实现往往通过某种隔离手段,比如:继承
就像,OOAD的接口和C#的接口也不是……

我只想问一个问题。。。

你怎么变成2个三角了。 --------------------编程问答--------------------
引用 17 楼 caozhy 的回复:
我只想问一个问题。。。

你怎么变成2个三角了。


哈哈, --------------------编程问答-------------------- 面向对象里面的多态问题!! --------------------编程问答-------------------- 每天回帖即可获得10分可用分! --------------------编程问答-------------------- 多态,我今天刚学过。
多态的三种形式:
父类 XX=new 子类();
抽象类 oo=new 子类();
接口 pp=new 实现类();

不过接口还没有学的 --------------------编程问答-------------------- public class 水果
{
}
public class 苹果 : 水果
{
}

水果 c = new 苹果(); 

这样楼主应该能看懂了吧
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,