标题: 多态到底有什么好处? [打印本页] 作者: 章成 时间: 2011-7-17 11:01 标题: 多态到底有什么好处? class A{
public int fun1(){}
public void fun2(){}
}
class B extends A{
public void fun2(){子类重写}
public boolean fun3(){}
}
class B extends A,A父类,B是子类。A a=new B(),这时a只能调用父类中的方法fun1(),和被子类重写的方法fun2(),但不能调用子类中原创的方法fun3()。B b=new B(),因为子类继承父类,这时b能调用父类中的方法,而且还能调用自身原创的方法fun3()。a能调用的b也都能调用,而且b还能调用a不能调用的fun3,那么使用多态到底有什么好处?作者: 匿名 时间: 2011-7-17 11:32
下面我个人的理解,不一定对哦。
我觉得这东西就像接口一样,子类B对外暴露出fun2的方法,子类c继承A对外暴露出的也是fun2的方法。有些时候只需要调用不同子类的fun2方法,而不需要调用fun3.。用这个A a=new B(),A a=new C()是不是很好的实现了封装啊,把不该你看到的东西不让你看。只给你看我想给你看的东西。呵呵~....作者: 匿名 时间: 2011-7-17 11:36
打个比方我们将多态中的父类比作是爸爸,而子类比作是他的儿子。这下就好理解了啊,现在你通过
A a = new B();那么你通过儿子找到了父亲,这样父亲就可以从儿子那里得到他从他这里继承过去的东西,比如姓啊等等。而儿子的日记和情书儿子肯定是锁起来了是不会给你看的啦。这样多态的好处就好理解了啊,比如儿子在学校打架了,老师可以通过他的儿子找到他的爸爸。作者: 匿名 时间: 2011-7-17 12:00
面相对象的3个基本特性,封装,继承,多态。。
多态当然有很多好处了。[code]public class polyTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Base obj = new Derived1();
obj.Draw();
obj = new Derived2();
obj.Draw();
}
}
class Base{
public void Fill()
{
System.out.println("Base.Fill");
}
public void Draw()
{
System.out.print("Base.Draw");
}
}
class Derived1 extends Base{
public void Draw()
{
System.out.println("Derived1.Draw");
}
public void Fill()
{
System.out.println("Derived1.Fill");
}
}
class Derived2 extends Base{
public void Draw()
{
System.out.println("Derived2.Draw");
}
public void Fill()
{
System.out.println("Derived2.Fill");
}
}[/code]这种机制就是使用子类的实例new Derived1 赋值给了父类 Base obj=nwe Derived1();