當前位置:編程學習大全網 - 編程語言 - java面向對象編程問題

java面向對象編程問題

關於多態

類之間的繼承關系使子類具有父類的所有變量和方法,=> 父類所具有的方法也可以在它所有子類中使用,發給父類的消息也可以發送給子類 => 子類的對象也是父類的對象=>子類的對象既可以做本身的類型,也可以做父類的類型。 呵呵,上述推導公式好像繞口令似的。我們舉個例子理解上述概念。舉例:

public class 動物 //動物是父類

public class 貓 extends 動物 //貓是子類

動物的所有特性在貓中可以使用,發給動物的信息貓也能收到=>貓的對象new 貓();既可以作為本身的類型 貓 a=new 貓(); 也可以作為父類的類型 動物 b = new 貓();這樣說理解了嗎?如有疑問請訪問我們的技術論壇。

如果大家明白了的話,我們就可以從上述公式推導出結論,所有的子類都可以作為父類的類型(同壹種類型)來對待。像剛才那個動物有很多子類啊,可以有很多對象。動物 a=new 貓();動物 b=new 狗(); 動物 c=new 豬();。這樣的將子類型的對象引用轉換成父類型的對象引用,叫做上溯造型(upcasting)。

我們再來引伸壹下,我們在數組那節課裏講了,數組存放的元素是相同類型的數據,但是上溯造型使得java允許創建不同類型對象的數組。例如:

Employee[] staff = new Employee[3];

staff[0] = new Manager();

staff[1] = new Secretary();

staff[2] = new Employee();

夷?這是怎麽回事啊,數組裏面不是相同類型嗎?對啊,因為Sectetary和Manager是Employee的子類,所以也可以通過上溯造型變成Employee啊。以前我們還學到了所有對象都是從java.lang.Object 繼承下來的。如果數組要是 Object型的話 Object[] obj=new Object[];那就是裏面放什麽對象都行了。因為什麽對象都可以是Object型的。

實踐:

// java中的多態

class Shape {

void draw() {}

void erase() {}

}

//圓形

class Circle extends Shape {

void draw() {

System.out.println("Circle.draw()");

}

void erase() {

System.out.println("Circle.erase()");

}

}

//正方形

class Square extends Shape {

void draw() {

System.out.println("Square.draw()");

}

void erase() {

System.out.println("Square.erase()");

}

}

//三角形

class Triangle extends Shape {

void draw() {

System.out.println("Triangle.draw()");

}

void erase() {

System.out.println("Triangle.erase()");

}

}

public class Shapes {

public static Shape randShape() {

switch((int)(Math.random() * 3)) {

default:

case 0: return new Circle();

case 1: return new Square();

case 2: return new Triangle();

}

}

public static void main(String[] args) {

Shape[] s = new Shape[9];

// 向數組裏添加類型

for(int i = 0; i < s.length; i++)

s[i] = randShape();

// 用多態的方法調用

for(int i = 0; i < s.length; i++)

s[i].draw();

}

}

  • 上一篇:Julia語言如何編寫用戶界面?
  • 下一篇:現在東歐旅遊穿什麽東歐穿衣風格
  • copyright 2024編程學習大全網