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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值