作者kairy (血腹兽)
看板java
标题Re: [问题] 还是不太懂多型
时间Tue Oct 28 08:02:07 2008
恕删
小弟也是初学
提供一些浅见,要是有误还烦请板友指正
: 1.多型就是有很一种类别有很多的类别型态,因为classA的function里的参数
: ,不知道会传什麽型态进来,所以就用多型,我这样子讲对吗?这就是多型的
: 好处吗?
对,以您的例子
假设有二个类别
Triangle 和 Rectangle 都是继承他们的超类别 Shape
Triangle 和 Rectangle 都可以视为是Shape
好处就在於
在撰码的时侯可以针对上层的类别或介面写程式(Shape),而不是
针对实作类别(Triangle, Rectangle)去写程式
举个例子
若今日Shape假设长这样
abstract class Shape{
abstract public void paint();
public void rotate(){
.........;
}
}
要继承Shape的类别就一定会有Shape的特性
class Triangle extends Shape{
public void paint(){
....;
}
}
今日假设有个method要传入参数并画出来时只要就好了
无须去知道传入的究竟是Triangle还是Rectangle
class Test{
public void testPaintMethod(Shape s){
s.paint();
}
}
这样Test这个类别只与Shape去互动而非与下层的Triangle或Rectangle互动
: 2.我看书上说就是因为第一个问题:我们不知会有什麽类别传入,所以我们用
: 多型,可是程式是自己打的,为什麽自己会不知道会有什麽类别传入参数?
: 因为我觉得自己会知道是什麽类别会传入,所以主方法里可能就改成 类别
: 三角型 形状=new 类别三角型();或是类别正方型 形状=new 类别正方型()
: ;而不是用多型的方法去写它。
虽然程式是自己打的,有的时侯我们使用多型的方法是为了增加程式的弹性与再利用率
以上述类别Test的例子来说,是用到多型的写法
没用到多型的写法是
class Test{
public void testPaintTriangleMethod(Triangle t)
{
t.paint();
}
public void testPaintRectangleMethod(Rectangle r)
{
r.paint();
}
}
变得只要是多一个形状,就必须新增一个方法
: 3.多型可以应用在那里呢?什麽情况最适合用甚至是必定要用的呢?
: 书上还写说"多型是建立在继承的基础之上的,没有继承,就不会有多型",可
: 是我上面写的例子,classB没有extends classA,它们之间没有继承关系,但
: 是有多型的关系,我觉得书是不会写错,那我的观念那里错了?
: 问题有点多,麻烦高手指导一下我的观念,非常谢谢了!
多型算是OO的基本观念,应用还挺多的
只要类别有继承或实作介面,而另一个方法是与超类别或介面互动
就算是多型的应用
如果有兴趣可以看看Design Pattern,有不少多型的应用
class B extends A
意思是说 这个类别可以看成B也能看成A,有多种型态 所以叫多型
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.56.13.124
1F:推 s66449:我是原PO~非常谢谢你的讲解 10/29 09:31