要JAVA的简单例子,继承\多态的,详细讲解运行的每一步
java中的多态是动态绑定的,也就是说在编译期不能确定一个方法的执行体是哪个方法(在继承中重写的方法)。执行果支委会根据在堆上分配的的引用去寻找方法体,所以产生你你所不想要的结果是正常的也是正确的。 改法有三种:第一种: 在子类中不要重写PlaytoString()这个方法就行了。这样子类的引用只能使用父类的PlaytoString()方法,就会打印出你想要的结果。如:class Round extends Shape { } //空的就行了第二种: 在子类中只写一句,super。 PlaytoString()就行了。如:class Round extends Shape { ...全部
java中的多态是动态绑定的,也就是说在编译期不能确定一个方法的执行体是哪个方法(在继承中重写的方法)。执行果支委会根据在堆上分配的的引用去寻找方法体,所以产生你你所不想要的结果是正常的也是正确的。
改法有三种:第一种: 在子类中不要重写PlaytoString()这个方法就行了。这样子类的引用只能使用父类的PlaytoString()方法,就会打印出你想要的结果。如:class Round extends Shape { } //空的就行了第二种: 在子类中只写一句,super。
PlaytoString()就行了。如:class Round extends Shape { void PlaytoString() { super。PlaytoString(); } } 第三种:在方法中加一个标识参数bFlag,当bFlag为true时实现子类方法,为false时调用super。
PlaytoString()如:class Shape { //在这是个伪参数,为了给子类一个相同的接口 void PlaytoString(boolean bFlag) { intln("Shape"); } } class Round extends Shape { void PlaytoString(boolean bFlag) { if(bFlage) super。
PlaytoString(); else intln("Round"); } }***********补充***********************第3种方法,父类和子类都采用void PlaytoString(boolean bFlag) 这个方法,没有那个无参的了。
因为java里所有的方法都是虚的,所以在执行时都是动态绑定的,目前也只有通过一个参数来确定人执行的父类的方法还是子类的。我建议你看一下Thinking in java这本书,里面有所讲解。当然,步痕旅游网想法:class Round1 extends Round{ void PlaytoString() { intln("Round1"); } } class Round2 extends Round{ void PlaytoString() { intln("Round2"); } } --------------------------------------------Shape manyRound[] = new Round[4]; manyRound[0] = new Round1(); manyRound[1] = new Round2(); for(int i=0; i < manyRound。
length; i ) { manyShape[i]。
PlaytoString(true); } ----------------------------------------------希望结果,"Round" "Round"实际结果, "Shape" "Shape" 。收起