黑马程序员技术交流社区
标题:
继承怎么用?
[打印本页]
作者:
肖云
时间:
2012-6-25 03:25
标题:
继承怎么用?
关于继承,教程里面根本就没有讲解,谁帮忙解释一下,谢谢.
作者:
ckz0409
时间:
2012-6-25 08:06
关于继承,我是这么理解的:一个类可以继承另外一个类,子类可以继承父类,父类也可以派生给子类。继承是面向对象一个重要的特性,子类可以有自己的成员,也可以继承父类的成员
作者:
平建
时间:
2012-6-25 09:18
就像楼上说的 子类可以继承父类 ,父类有的子类有,子类有的父类不一定有。通俗点讲 子类要比父类有强大点!
作者:
朱永恒
时间:
2012-6-25 12:14
当一个类作为父类,其他的类继承于他成为子类,子类继承父类不被private修饰的属性和方法,子类还可以自己扩展自己的成员
作者:
王玲星
时间:
2012-6-25 12:38
子类:父类 就继承了
class Chinese:Person //就这样 Chinese就继承了Person
{
}
作者:
王玲星
时间:
2012-6-25 12:40
怎么会变成这个样子。。。真心纠结了 总之用“冒号”就继承了
作者:
肖云
时间:
2012-6-25 23:53
还是不太懂,有谁举例说明一下,多谢了
作者:
文硕
时间:
2012-6-29 12:54
打个比方,鱼有淡水鱼和咸水鱼,淡水鱼有例如鲤鱼和草鱼,咸水鱼有例如带鱼和鳗鱼。我们可以说淡水鱼,咸水鱼继承了鱼的特征,并添加了一些自己的特征;鲤鱼,草鱼继承了淡水鱼和鱼的特征,并添加了一些自己的特征,带鱼和鳗鱼继承了咸水鱼和鱼的特征,并添加了一些自己的特征。总之继承就是派生类或者说子类继承了基类或者说父类的数据成员、属性成员、方法成员等,为其所用。
作者:
程艳伟
时间:
2012-6-29 15:00
子类就像一个孩子继承了他老爸的一些特征,另外还有自己的一些特征
作者:
刘旺
时间:
2012-6-30 10:28
本帖最后由 刘旺 于 2012-6-30 11:48 编辑
例如: 人类是一个父类,而中国人就是这个父类的子类.子类包含父类的属性,但也有自己的特征, 中国人拥有中国国籍 人类没有 .
子类的语法 class 子类名:父类名 {}. 我上面说的是 实现继承 继承还包括 接口继承 多重继承 具体的内用 你可以 参考 c# 高级编程 这本书
作者:
秦永辉
时间:
2012-7-2 14:32
我个人感觉继承的主要优点:继承可以减少定义类的量。当要用到的多个类有共同的方法或属性时,该情况下比较适合用继承,可以减少累的定义!派生类继承全部基类的方法和属性,派生类还可以有自己独特的属性!
作者:
秦永辉
时间:
2012-7-2 14:55
例如:
class C
{
public string str1 = "这是基类!";
public void print1()
{
Console.WriteLine(str1);
}
}
class otherclass : C
{
public string str2 = "这是派生类!";
public void print2()
{
Console.WriteLine(str2);
Console.ReadKey();
}
}
class Program
{
static void Main(string[] args)
{
otherclass strclass = new otherclass();
strclass.print1();
strclass.print2();
}
}
复制代码
作者:
杨正
时间:
2012-7-2 23:22
本帖最后由 杨正 于 2012-7-2 23:25 编辑
关于继承,教程里面根本就没有讲解,谁帮忙解释一下,谢谢.
确实挺遗憾,苏老师的精彩教程里没有。这里找到一个视频,是苏老师讲关于继承的一个视频,你可以看一下啊。
http://v.youku.com/v_show/id_XMjg3NTMxMTIw.html
作者:
杨正
时间:
2012-7-2 23:37
还是不太懂,有谁举例说明一下,多谢了
要理解继承,我觉得先理解封装比较好,这里把封装、继承、多态一块举例,做个比较,方便理解,实际上这三者也就是面向对象的三大特征,现在编程世界的核心思想。
一、封装:
首先,属性可用来描述同一类事物的特征, 行为可描述一类事物可做的操作,
封装就是要把属于同一类事物的共性(包括属性与行为)归到一个类中,以方便使用
.比如人这个东东,可用下面的方式封装:
人{
年龄(属性一)
身高(属性二)
性别(属性三)
做事(行为之一)
走路(行为之二)
说话(行为之三)
}
二、继承:
由于封装,使得有共同特征的一类事物的所有描述信息都被归于一类之中,但我们知道,这并不是万能的,有些事物有共性,但还存在区别,比如教师,简单封装起来如下:
教师{
年龄(属性一)
身高(属性二)
性别(属性三)
做事(行为之一)
走路(行为之二)
说话(行为之三)
教书(行为之四)
}
上面对"教师"的封装,与对"人"的封装基本上差不多,只是多了一个特征行为:教书,
教师有与人一样的共性, 但我们不能说"人教书",也就是不能把教书封装到"人"之中去,教书是教师的特征行为之一. 为了省事地封装教师(代码的复用,这只是继承存在的原因之一), 可以让教师去继承人,如:
教师 extends 人{
教书(行为之三)
}
这样,我们就
不用重新定义那些已经被"人"这一个类所封装的那些属性与行为了,而只需要使用继承的方式,在人的基础上拓展教师专有的行为
,即"教书"即可把教师描述出来;这样的结果, 即是教师也同时拥有"人"之中所封装的一切属性与行为, 还拥有自己的特征行为"教书".
三、多态:
多态的概念发展出来,是以封装和继承为基础的(其实我觉得抽象也应该算是面向对象的大特征之一,要封装,抽象是必须的)
简单的理解一下多态,比如:
人这个类,封装了很多人类共有的特性,
教师是人的子类,继承了人的属性与行为,当然教师有自己的特征行为,比如教书授课;
学生是人的子类,继承了人的属性与行为,当然学生有自己的特征行为,比如学习做作业;
现在,当我们需要去描述教师与学生各自的行为的时候, 我们可以分开来说"教师在授课", "学生做作业", 但如果我们要站在抽象的角度, 也就是从教师与学生的父类"人"的角度, 来同时描述他们各自的行为时,我们怎么描述?"人在授课"?"人在做作业"?这是不是怪怪的很不合适?不合适的问题就在于, 对于行为主体,我们使用了抽象层次的东东"人",而对于行为本身, 我们却使用了具体的东东"授课"与"教书". 怎么解决呢? 那就需要解决抽象与具体的矛盾问题.
既然是站在抽象在角度来描述,那我们把行为抽象一下,不就能同时描述了吗?比如"人在做事"(教师授课与学生做作业都可以说成人在做事),这样就解决了抽象层次与具体层次之间的矛盾.
到了这一步, 我们可以把两个描述: "教师在做事", "学生在做事" 两者统一为"人在做事",
然后, 我们可以在"教师"的"做事"行为中去调用教师自己的特征行为"授课",
在"学生"的"做事"行为中去调用学生自己的特征行为"做作业",
所以,当调用"人"去"做事"的时候,如果这个人是教师,那他所做的事实际上就是"教书",
如果这个人是学生,那他所做的事实际上就是"做作业".
也就是说在这里"人"是多态的, 在不同的形态时,特征行为是不一样的, 这里的"人", 同时有两种形态,一种是教师形态,一种是学生形态,所对应的特征行为分别是"授课"与"做作业".
完成上述的描述过程, 其实就是多态机制的体现.
多态, 就是站在抽象的层面上去实施一个统一的行为,到个体(具体)的层面上时, 这个统一的行为会因为个体(具体)的形态特征而实施自己的特征行为
.
多态比起封装与继承来说要复杂很多, 上面的描述很简单, 不用去死抠多态两个字,
其实只要明白:
能站在抽象的角度去描述一件事,
而针对这件抽象的事, 对于每个个体(具体)又能找到其自身的行为去执行, 这就是多态.
作者:
金龙
时间:
2012-7-2 23:40
继承,其实对不同事物的共性内容进行想上抽取,抽取出来的类,我们可以称之为父类,父类里面定义的都是共有的内容,这样子类在继承它之后,父类有的东西直接就继承过来了,不需自己再去定义。在写代码的时候,很多时候需要考虑类与类之间的关系,(即这个类是不是另一个类的一种呢?)这样既合调理,也更简洁。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2