A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 章成 黑马帝   /  2011-7-17 11:01  /  3134 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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,那么使用多态到底有什么好处?

4 个回复

正序浏览
黑马网友  发表于 2011-7-17 12:00:35
板凳
面相对象的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();

比如说杯子是茶杯的父类,茶杯是杯子的子类,也可以说茶杯也是杯子。

上例中obj.Draw();调用2次 结果却不一样。同一条语句具备了不同的运行形态,实现多态。
回复 使用道具 举报
黑马网友  发表于 2011-7-17 11:36:47
藤椅
打个比方我们将多态中的父类比作是爸爸,而子类比作是他的儿子。这下就好理解了啊,现在你通过
A  a = new B();那么你通过儿子找到了父亲,这样父亲就可以从儿子那里得到他从他这里继承过去的东西,比如姓啊等等。而儿子的日记和情书儿子肯定是锁起来了是不会给你看的啦。这样多态的好处就好理解了啊,比如儿子在学校打架了,老师可以通过他的儿子找到他的爸爸。
回复 使用道具 举报
黑马网友  发表于 2011-7-17 11:32:26
沙发
下面我个人的理解,不一定对哦。
我觉得这东西就像接口一样,子类B对外暴露出fun2的方法,子类c继承A对外暴露出的也是fun2的方法。有些时候只需要调用不同子类的fun2方法,而不需要调用fun3.。用这个A a=new B(),A a=new C()是不是很好的实现了封装啊,把不该你看到的东西不让你看。只给你看我想给你看的东西。呵呵~....
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马