`

java 多态 例子

    博客分类:
  • Java
阅读更多

其实也就是两种绑定状态:动态绑定(也称后期绑定),静态绑定(也称前期绑定).

 

1  实例方法:                                实例方法与引用所实际引用的对象绑定.(动态绑定).
2  静态方法:                                静态方法与引用所实际声明的类型绑定.(静态绑定).
3  成员变量(静态或非静态):         成员变量与引用所实际声明的类型绑定.(静态绑定). 

 

 

  1. /**   
  2.  * 多态的演示   
  3.  * @author fhd001   
  4.  */   
  5. public class DtTest {   
  6.   
  7.     public static void main(String[] args) {   
  8.   
  9.         ChildClass c1 = new ChildClass();   
  10.         c1.aaa();   
  11.         c1.bbb();   
  12.         System.out.println(c1.n);   
  13.         System.out.println(c1.str);   
  14.            
  15.         parentClass p1 = new parentClass();   
  16.         p1.aaa();   
  17.         p1.bbb();   
  18.         System.out.println(p1.n);   
  19.         System.out.println(p1.str);   
  20.            
  21.         parentClass p2 = new ChildClass();   
  22.         p2.aaa();           //aaa()是实例方法,它与实际引用的对象绑定   
  23.         p2.bbb();           //bbb()是静态方法,它与实际声明的类型绑定   
  24.         System.out.println(p2.n);   //n是变量,它与声明的类型绑定   
  25.         System.out.println(p2.str); //str变量,它与声明的类型绑定.   
  26.     }   
  27. }   
  28.   
  29. // 父类   
  30. class parentClass {   
  31.   
  32.     int n = 12;   
  33.     static String str = "abc";   
  34.        
  35.     void aaa(){   
  36.         System.out.println("parentClass------>aaa");   
  37.     }   
  38.        
  39.     static void bbb(){   
  40.         System.out.println("parentClass------>bbb");   
  41.     }   
  42. }   
  43.   
  44. //子类   
  45. class ChildClass extends parentClass{   
  46.        
  47.     int n = 18;   
  48.     static String str = "efg";   
  49.        
  50.     void aaa(){   
  51.         System.out.println("ChildClass-------->aaa");   
  52.     }   
  53.        
  54.     static void bbb(){   
  55.         System.out.println("ChildClass-------->bbb");   
  56.     }   
  57. }  

 

例子2:

 

 

import java.util.*;

class Shape {
 public void draw() {
 }

 public void erase() {
 }
}

class Circle extends Shape {
 public void draw() {
  System.out.println("Circle.draw()");
 }

 public void erase() {
  System.out.println("Circle.erase()");
 }
}

class Square extends Shape {
 public void draw() {
  System.out.println("Square.draw()");
 }

 public void erase() {
  System.out.println("Square.erase()");
 }
}

class Triangle extends Shape {
 public void draw() {
  System.out.println("Triangle.draw()");
 }

 public void erase() {
  System.out.println("Triangle.erase()");
 }
}

class RandomShapeGenerator {
 private Random rand = new Random(47);

 public Shape next() {
  switch (rand.nextInt(3)) {
  default:
  case 0:
   return new Circle();
  case 1:
   return new Square();
  case 2:
   return new Triangle();
  }
 }
}

public class Shapes {
 private static RandomShapeGenerator gen = new RandomShapeGenerator();

 public static void main(String[] args) {
  Shape[] s = new Shape[9];
  for (int i = 0; i < s.length; i++)
   s[i] = gen.next();
  for (Shape shp : s)
   shp.draw();
 }
}

运行结果为:

Triangle.draw()
Triangle.draw()
Square.draw()
Triangle.draw()
Square.draw()
Triangle.draw()
Square.draw()
Triangle.draw()
Circle.draw()

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics