动态绑定:
运行时根据对象的类型进行绑定;以便在运行时能判断对象的类型,从而调用正确的方法。
对象工厂实例:
class Shape {public void draw() {//画方法}public void erase() {//擦除方法}}class Circle extends Shape {//圆形@Overridepublic void draw() { System.out.println("画圆形"); }@Overridepublic void erase() { System.out.println("擦除圆形"); }}class Triangle extends Shape {//三角形@Overridepublic void draw() { System.out.println("画三角形"); }@Overridepublic void erase() { System.out.println("擦三角形"); }}class Square extends Shape {//正方形@Overridepublic void draw() { System.out.println("画方形"); }@Overridepublic void erase() { System.out.println("擦方形"); }}class RandomShapeGenerator {private Random random=new Random(47);public Shape next(){//对象选择器,通过switch循环,传入指定的数组便能创建相应的对象switch (random.nextInt(3)){default:case 0: return new Circle();case 1: return new Triangle();case 2:return new Square();}}}public class Shapes{public static void main(String[] args) {RandomShapeGenerator gen=new RandomShapeGenerator();Shape[] s =new Shape[9];for(int i=0;i<s.length;i++){s[i]=gen.next();}for (Shape shp:s) {shp.draw();}}}
多态只存在于普通方法中对于静态方法,是不具有多态性的
package com.zx.test08;class StaticSupe{public static String staticSupeGet(){return "staticSuperGet";}public String dynamSupeGet(){return "dynamSupeGet()";}}class StaticSub extends StaticSupe{public static String staticSubGet(){return "staticSubGet=====";}public String dynamSubGet(){return "dynamSubGet()==========";}}public class StaticPolymorphism {public static void main(String[] args) {StaticSupe sup = new StaticSub();System.out.println(sup.dynamSupeGet());System.out.println(sup.staticSupeGet());}}
注意:基类中private修饰的方法不能被子类覆盖,虽然编译器不会报错,但会和我们所要的结果不同,所说我们要在子类中对于基类的private方法要采用不用的方法名去命名,以便我门可以区分。
