• 多态


    多态      函数体现

    如方法的重载

    多态      对象体现

    how

    1 classextends 动物{public void 吃(){}}
    2 动物 D=new 猫();
    3 D.吃();
    扩展:据此增强扩展性
    1
    abstract class Animal 2 { 3 abstract void eat(); 4 } 5 6 class Cat extends Animal 7 { 8 public void eat(){ 9 System.out.println("吃鱼"); 10 } 11 } 12 13 class Dog extends Animal 14 { 15 public void eat(){ 16 System.out.println("吃骨头"); 17 } 18 } 19 20 class DuoTai 21 { 22 public static void main(String[] args) 23 { 24 /* 25 Cat c=new Cat(); 26 c.eat(); 27 Dog d=new Dog(); 28 d.eat(); 29 */ 30 //改进版,以后要是有pig也是不怕的 31 duoTaiEat(new Cat()); 32 duoTaiEat(new Dog()); 33 } 34 public static void duoTaiEat(Animal a){ 35 a.eat(); 36 } 37 }

     

    存在问题:增加一个Pig,岂不是要多写一句duoTaiEat(new Pig());???      反射!!!

    上转型与下转型

    上转型:Animal a=new Cat();//a可以调用父类中声明过的方法,不能调用Cat的特有方法

    下转型:Cat c=(Cat)a;//原本a为上转型对象了,现在强制下转型,c可以掉用Cat的特有方法

     1 /**
     2 *定义抽象类Animal,具有抽象方法eat()
     3 *Cat和Dog继承Animal且均具有各自特有的方法
     4 */
     5 abstract class Animal
     6 {
     7     abstract void eat();
     8 }
     9 
    10 class Cat extends Animal
    11 {
    12     public void eat(){
    13         System.out.println("猫吃鱼");
    14     }
    15     public void catchMouse(){
    16         System.out.println("猫抓老鼠");
    17     }
    18 }
    19 class Dog extends Animal
    20 {
    21     public void eat(){
    22         System.out.println("狗啃骨头");
    23     }
    24     public void kanJia(){
    25         System.out.println("狗看家");
    26     }
    27 }
    28 
    29 class ZhuanXing 
    30 {
    31     public static void function(Animal a){
    32         //动物都具有eat(),当传递进来Cat的时候,相当于Animal a=new Cat();上转型
    33         a.eat();
    34         //instanceof判断一个对象是否是某一个类的实例
    35         if(a instanceof Cat){
    36             Cat c=(Cat)a;//强制下转型
    37             c.catchMouse();
    38         }
    39         else if(a instanceof Dog){
    40             Dog d=(Dog)a;
    41             d.kanJia();
    42         }
    43         
    44     }
    45     public static void main(String[] args) 
    46     {
    47         function(new Cat());
    48         function(new Dog());
    49 
    50     }
    51 }

     注意:

      1.上面这种做法明显有弊端,当出现的子类越来越多的时候,必须要不停的去判断,这里只是顺便展示一下instanceof的用法

      2.当然,在子类有限且很少的情况下可以这么去做,比如说人分为男人和女人的时候

    多态定义工具类应用

    多态的注意事项

  • 相关阅读:
    TortoiseSVN 命令 (命令行执行工具)(转)
    express blend下载
    js绝对地址图片转换成base64的方法
    js判断是否安装flash player及当前版本 和 检查flash版本是否需要升级
    js实现默认或者触发一个事件选中元素内容的方法
    js实现复制功能,将需要复制的内容放入剪切板上
    前端js上传文件插件
    javascript检测浏览器的缩放状态实现代码 是指浏览器网页内容的百分比缩放(按Ctrl和+号键或者-号键的缩放)
    html5 canvas 画图移动端出现锯齿毛边的解决方法
    jquery实现全选/反选功能
  • 原文地址:https://www.cnblogs.com/erhai/p/4689426.html
Copyright © 2020-2023  润新知