java编程-面向对象---继承和多态 Love The Way You Lie 2022-08-23 13:59 174阅读 0赞 (参考[http://java.chinaitlab.com/List\_186\_17.html][http_java.chinaitlab.com_List_186_17.html]) class Animal \{ private int weight; public int getWeight() \{ return weight; \} public void setWeight(int w) \{ weight=w; \} \} class Dog extends Animal \{ /\*\* \*子类新增方法 \*/ public void Bark() \{ System.out.println("Wang~~Wang~~~"); \} \} public class aaa \{ //private static Dog myDog; public static void main(String args\[\]) \{ Dog myDog; myDog=new Dog(); myDog.setWeight(50); System.out.println("My Dog's Weight is"+myDog.getWeight()); myDog.Bark(); \} \} ***A variable that can hold a reference to an object of class A can*** ***also hold a reference to an object belonging to any subclass of*** ***A.(*** ***一个能指向类*** ***A*** ***的对象变量也可以指向类*** ***A*** ***的子类的对象*** ***)*** VehiclemyVehicle ; Vehicle myVehicle = **new** Car(); //ok 父类对象 子类对象 myCar = myVehicle;// wrong! 子类对象 父类对象 myCar = (Car)myVehicle;//ok if (myVehicle **instanceof** Car) ... 下面我们来看一下,经常用到的重要概念,也就是java语言的的OOP特性,这是对于OOP而言的,不含前面的OOA和OOD的。因为是初学嘛,还没有学到怎么分析和设计呢。[Java][]的OOP有三大特性:封装、继承、多态。 封装的概念已经说过了,我们讲的是,它用权限修饰符private使得属性不能被外界访问,像是人的五脏六腑怎么能让人随意的碰呢?人的这个属性也是要封装的。如有再不明白,请访问我们的[技术论坛][Link 1]。 说一下容易理解的继承: 当一个类是另一个类的特例时,这两个类之间具有父子类的关系。子类继承了父类的方法和属性,就是说子类可以重用父类中的这部分代码。比如:轿车是车的一个特例。轿车是车的子类。就是说,轿车继承了车的一切特性。继承用关键字extends表示。 实践: <table style="BORDER-TOP-STYLE: dotted; BORDER-RIGHT-STYLE: dotted; BORDER-LEFT-STYLE: dotted; BORDER-BOTTOM-STYLE: dotted"> <tbody> <tr> <td> <p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span><font>//</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这是基类</span></p> <p style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">public</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">class</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> Che { </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 3"> </span></span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">private</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">int</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span><span style="FONT-SIZE: 10pt; COLOR: #0000c0; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">wheel</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> = 4;</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 3"> </span></span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">public</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">int</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> getWheel() { </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2"> </span><span style="mso-tab-count: 3"> </span></span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">return</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span><span style="FONT-SIZE: 10pt; COLOR: #0000c0; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">wheel</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">;</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 3"> </span>}<span style="mso-tab-count: 1"> </span>}</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="COLOR: blue"><span style="mso-tab-count: 3"><font> </font></span></span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">public</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">class</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> Jiaoche </span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">extends</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> Che { </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-spacerun: yes"> </span><span style="mso-tab-count: 4"> </span></span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">private</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> String </span><span style="FONT-SIZE: 10pt; COLOR: #0000c0; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">pinpai</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> = </span><span style="FONT-SIZE: 10pt; COLOR: #2a00ff; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">"</span><span style="FONT-SIZE: 10pt; COLOR: #2a00ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">桑塔纳</span><span style="FONT-SIZE: 10pt; COLOR: #2a00ff; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">"</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">;</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 3"> </span></span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">public</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> String getPinpai() { </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2"> </span><span style="mso-tab-count: 3"> </span></span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">return</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span><span style="FONT-SIZE: 10pt; COLOR: #0000c0; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">pinpai</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">;</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 2"> </span>}<span style="mso-tab-count: 1"> </span>}</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="COLOR: blue"><span style="mso-tab-count: 3"><font> </font></span></span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">public</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">class</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> Testche { </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 3"> </span></span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">public</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">static</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">void</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> main(String[] args) { </span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2"> </span><span style="mso-tab-count: 3"> </span>Jiaoche car = </span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">new</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> Jiaoche();<span style="mso-tab-count: 2"> </span></span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2"> </span><span style="mso-tab-count: 3"> </span></span><b><span style="FONT-SIZE: 10pt; COLOR: #7f0055; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">int</span></b><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> wheels = car.getWheel(); </span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">//</span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">调用基类的方法</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2"> </span><span style="mso-tab-count: 3"> </span>String Pinpal = car.<span style="BACKGROUND: silver; mso-highlight: silver">getPinpai</span>();</span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">//</span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">调用本身的方法</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2"> </span><span style="mso-tab-count: 3"> </span>System.</span><i><span style="FONT-SIZE: 10pt; COLOR: #0000c0; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">out</span></i><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">.println(</span><span style="FONT-SIZE: 10pt; COLOR: #2a00ff; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">"</span><span style="FONT-SIZE: 10pt; COLOR: #2a00ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">车有</span><span style="FONT-SIZE: 10pt; COLOR: #2a00ff; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> "</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">+wheels+</span><span style="FONT-SIZE: 10pt; COLOR: #2a00ff; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">" </span><span style="FONT-SIZE: 10pt; COLOR: #2a00ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">个轮子</span><span style="FONT-SIZE: 10pt; COLOR: #2a00ff; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">"</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">);</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 2"> </span><span style="mso-tab-count: 3"> </span>System.</span><i><span style="FONT-SIZE: 10pt; COLOR: #0000c0; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">out</span></i><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">.println(</span><span style="FONT-SIZE: 10pt; COLOR: #2a00ff; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">"</span><span style="FONT-SIZE: 10pt; COLOR: #2a00ff; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">轿车的品牌是</span><span style="FONT-SIZE: 10pt; COLOR: #2a00ff; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> "</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">+Pinpal);</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"> </span></p> <p style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 2"> </span>}</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt"><span style="mso-tab-count: 1"> </span><span style="COLOR: black">}</span> </span> </p></td> </tr> </tbody> </table> 对于继承来说,很容易理解因为你就看字面的意思就知道它是继承着父类的特性。多态字面不容易理解了。下面我们具体讲一下吧! 类之间的继承关系使子类具有父类的所有变量和方法,=> 父类所具有的方法也可以在它所有子类中使用,发给父类的消息也可以发送给子类 => 子类的对象也是父类的对象=>子类的对象既可以做本身的类型,也可以做父类的类型。 呵呵,上述推导公式好像绕口令似的。我们举个例子理解上述概念。举例: public class 动物 //动物是父类 public class 猫 extends 动物 //猫是子类 动物的所有特性在猫中可以使用,发给动物的信息猫也能收到=>猫的对象new 猫();既可以作为本身的类型 猫 a=new 猫(); 也可以作为父类的类型 动物 b = new 猫();这样说理解了吗?如有疑问请访问我们的技术论坛。 如果大家明白了的话,我们就可以从上述公式推导出结论,所有的子类都可以作为父类的类型(同一种类型)来对待。像刚才那个动物有很多子类啊,可以有很多对象。动物 a=new 猫();动物 b=new 狗(); 动物 c=new 猪();。这样的将子类型的对象引用转换成父类型的对象引用,叫做上溯造型(upcasting)。 我们再来引伸一下,我们在数组那节课里讲了,数组存放的元素是相同类型的数据,但是上溯造型使得java允许创建不同类型对象的数组。例如: <table style="BORDER-TOP-STYLE: dotted; BORDER-RIGHT-STYLE: dotted; BORDER-LEFT-STYLE: dotted; BORDER-BOTTOM-STYLE: dotted"> <tbody> <tr> <td> <p> Employee[] staff = new Employee[3];</p> <p> staff[0] = new Manager();</p> <p> staff[1] = new Secretary();</p> <p> staff[2] = new Employee(); </p></td> </tr> </tbody> </table> 夷?这是怎么回事啊,数组里面不是相同类型吗?对啊,因为Sectetary和Manager是Employee的子类,所以也可以通过上溯造型变成Employee啊。以前我们还学到了所有对象都是从java.lang.Object 继承下来的。如果数组要是 Object型的话 Object\[\] obj=new Object\[\];那就是里面放什么对象都行了。因为什么对象都可以是Object型的。 实践: <table style="BORDER-TOP-STYLE: dotted; BORDER-RIGHT-STYLE: dotted; BORDER-LEFT-STYLE: dotted; BORDER-BOTTOM-STYLE: dotted"> <tbody> <tr> <td> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: green"><font>// java</font></span><span style="COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的多态</span><span style="COLOR: green"> </span></p> <p style="MARGIN: 0cm 0cm 0pt"><font><span style="COLOR: maroon">class</span><span style="COLOR: black"> Shape { </span></font></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>void draw() {} </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>void erase() {} </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font>} </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: green"><font>//</font></span><span style="COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">圆形</span><span style="COLOR: green"> </span></p> <p style="MARGIN: 0cm 0cm 0pt"><font><span style="COLOR: maroon">class</span><span style="COLOR: black"> Circle</span><span style="COLOR: maroon"> extends</span><span style="COLOR: black"> Shape { </span></font></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>void draw() { </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>System.out.println("Circle.draw()"); </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>} </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>void erase() { </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>System.out.println("Circle.erase()"); </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>} </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font>} </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: green"><font>//</font></span><span style="COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">正方形</span><span style="COLOR: green"> </span></p> <p style="MARGIN: 0cm 0cm 0pt"><font><span style="COLOR: maroon">class </span><span style="COLOR: black">Square extends Shape { </span></font></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>void draw() { </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>System.out.println("Square.draw()"); </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>} </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>void erase() { </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>System.out.println("Square.erase()"); </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>} </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font>} </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: green"><font>//</font></span><span style="COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">三角形</span><span style="COLOR: green"> </span></p> <p style="MARGIN: 0cm 0cm 0pt"><font><span style="COLOR: maroon">class </span><span style="COLOR: black">Triangle </span><span style="COLOR: maroon">extends</span><span style="COLOR: black"> Shape { </span></font></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>void draw() { </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>System.out.println("Triangle.draw()"); </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>} </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>void erase() { </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>System.out.println("Triangle.erase()"); </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>} </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font>} </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><font><span style="COLOR: maroon">public class</span><span style="COLOR: black"> Shapes { </span></font></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>public static Shape randShape() { </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>switch((int)(Math.random() * 3)) { </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>default: </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>case 0: return new Circle(); </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>case 1: return new Square(); </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>case 2: return new Triangle(); </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>} </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>} </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><font><span style="COLOR: black"><span style="mso-spacerun: yes"> </span></span><span style="COLOR: maroon">public static void main</span><span style="COLOR: black">(String[] args) { </span></font></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>Shape[] s = new Shape[9]; </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><font><span style="COLOR: black"><span style="mso-spacerun: yes"> </span></span><span style="COLOR: green">// </span></font><span style="COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">向数组里添加类型</span><span style="COLOR: green"> </span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>for(int i = 0; i < s.length; i++) </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>s[i] = randShape(); </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><font><span style="COLOR: black"><span style="mso-spacerun: yes"> </span></span><span style="COLOR: green"><span style="mso-spacerun: yes"> </span>// </span></font><span style="COLOR: green; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用多态的方法调用</span><span style="COLOR: green"> </span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>for(int i = 0; i < s.length; i++) </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>s[i].draw(); </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font><span style="mso-spacerun: yes"> </span>} </font></span></p> <p style="MARGIN: 0cm 0cm 0pt"><span style="COLOR: black"><font>}</font></span> </p></td> </tr> </tbody> </table> [Java][]的多态性,有什么意义呢?它的突出优点是使程序具有良好的扩展性。它通过继承,可以派生出任意多个新类型,或向基类增加更多方法时,无须修改原有对基础类进行处理的相关程序。就是扩展性好。 我们返回再看面向对象(专指OOP)的这三个特性封装、继承、多态三者的关系。没有封装就没有继承,没有继承就没有多态。 abstract class shape\{ int x,y; String color; public shape()\{ x=0; y=0; \} public shape(int xx,int yy)\{ x=xx; y=yy; \} void setColor(String str)\{ color=str; \} abstract double getArea(); \} class Rect extends shape\{ public Rect(int xx,int yy)\{ super(xx,yy); \} double getArea()\{ return x\*y; \} \} class oval extends shape\{ public oval(int xx,int yy)\{ super(xx,yy); \} double getArea()\{ return 0.5\*x\*x\*y\*y; \} \} class aaa\{ public static void main(String\[\] args)\{ // shape sh=new shape(10,10); Rect rc=new Rect(10,10); System.out.println(rc.getArea()); oval ov=new oval(20,10); System.out.println(ov.getArea()); \} \} [http_java.chinaitlab.com_List_186_17.html]: http://java.chinaitlab.com/List_186_17.html [Java]: http://java.chinaitlab.com/ [Link 1]: http://bbs.chinaitlab.com/
相关 面向对象编程:Java继承和多态应用 面向对象编程(Object-Oriented Programming,简称OOP)是现代编程的主要方式之一。其中,Java作为广泛使用的OOP语言,提供了继承和多态等特性。 妖狐艹你老母/ 2024年09月18日 09:15/ 0 赞/ 5 阅读
相关 Java面向对象编程:继承与多态实例 在Java中,面向对象编程的核心特性包括封装、继承和多态。下面分别对这些概念进行实例说明。 1. 继承: 继承是子类可以自动获得父类的全部属性和行为的过程。比如: ```j 曾经终败给现在/ 2024年09月13日 03:24/ 0 赞/ 16 阅读
相关 Java面向对象编程:继承和多态问题案例 在Java面向对象编程中,继承和多态是两个核心概念。下面分别介绍这两个概念并提供案例。 1. 继承 继承是类与类之间的关系,子类继承父类的属性和方法,同时也可以添加新的属性 女爷i/ 2024年09月13日 01:12/ 0 赞/ 17 阅读
相关 Java面向对象编程:继承与多态实例 在Java中,面向对象编程的继承和多态是两个核心概念。 1. 继承(Inheritance): - **定义**:子类可以继承父类的所有非私有属性和方法。这里需要注意的 清疚/ 2024年09月12日 14:15/ 0 赞/ 21 阅读
相关 Java面向对象编程:继承和多态问题实例 在Java中,继承和多态是面向对象编程中的两个重要概念。下面我将通过一些实例来解释它们。 1. **继承**: - 实例:汽车(类)与轿车、卡车(子类) ```j 分手后的思念是犯贱/ 2024年09月12日 11:48/ 0 赞/ 17 阅读
相关 Java面向对象编程:继承与多态问题 在Java的面向对象编程(OOP)中,继承和多态是两个核心概念。 1. 继承: - **单一继承**:一个类只能有一个直接父类。 - **多重继承**:通过接口或 心已赠人/ 2024年09月10日 22:51/ 0 赞/ 36 阅读
相关 Java面向对象编程:继承和多态应用实例 在Java中,继承和多态是面向对象编程的两个重要特性。以下将通过一些实际例子来说明它们的应用。 1. **继承**: - 例子:`Car` 类继承自 `Vehicle` 一时失言乱红尘/ 2024年09月10日 08:27/ 0 赞/ 21 阅读
相关 java编程-面向对象---继承和多态 (参考[http://java.chinaitlab.com/List\_186\_17.html][http_java.chinaitlab.com_List_186_17. Love The Way You Lie/ 2022年08月23日 13:59/ 0 赞/ 175 阅读
还没有评论,来说两句吧...