zoukankan      html  css  js  c++  java
  • 对象多态性

    基本概念的解释。

    多态性的依赖条件是方法的覆写!!

    观察如下的一个程序:

    class A{
        public void print(){
             System.out.println("A--print()") ;
        }    
    }
    class B extends A{
        public void print(){
            System.out.println("B--print()") ;
        }
    }
    public class Test{
        public static void main(String args[]){
            B b = new B() ;
            b.print() ;
        }
    }

    输出结果是 B--print() ;

      一》》方法的多态性:

      (1)方法的重载:同一个方法名称会根据传入参数的类型及个数不同执行不同的方法体

      (2)方法的覆写:同一个方法会根据子类的不同实现不同的功能。

      二》》对象的多态性:值得是发生在继承关系类之中,子类和父类之间的转换

      (1)向上转型:(自动完成)父类 父类对象 = 子类实例;

      (2)向下转型:(强制完成)子类 子类对象 = (子类) 父类实例;

    范例:

      

    class A{
        public void print(){
             System.out.println("A--print()") ;
        }    
    }
    class B extends A{
        public void print(){
            System.out.println("B--print()") ;
        }
    }
    public class Test{
        public static void main(String args[]){
            A a = new B() ; //向上转型
            B b = (B) a ;//向下转型
            a.print() ;
            b.print() ;
        }
    }
    //结果都会输出 B--print();

    为什么需要向下转型呢??

     对于数据的操作分为两步

    1.设置数据 : 最需要的是参数一致的功能

      如果有一个方法:

    public static void fun(A a){//如果要把B的参数传过来,就需要向上转型。

          B  b =  (B) a ;//此时如果需要调用B类中的个性方法,那么就需要向下转型

    }

    2。取出数据

    向下转型必须发生在向上转型之后操作,如下范例(错误

    class A{
        public void print(){
             System.out.println("A--print()") ;
        }    
    }
    class B extends A{
        public void print(){
            System.out.println("B--print()") ;
        }
        public void fun(){
            System.out.println("fun()") ; 
        }
    }
    public class Test{
        public static void main(String args[]){
            A a = new A() ;
            B b = (B) a ;
            
        }
    }

    结果显示

    ClassCastException 类转换异常,没有关系的类对线更强制发生向下转型时候发生 的异常。

    Java判断类和实例的关系:

    1.instanceof

    class A{
    
    }
    class B extends A{
        
    }
    public class TestDemo{
        public static void main(String arg[]){
            A a = new B() ;
            System.out.println(a instanceof A) ;  // true
            System.out.println(a instanceof B) ;  // true
         if(a instanceof B){ //如果a对象是B的实例化,那么就可以向下转型
           B b = (B) a ; 
         }

        如果:
             A a = new A() ;
            System.out.println(a instanceof A) ; //true
            System.out.println(a instanceof B) ;   //false


          } }
    //如果是向上传递,那么,a是A的实例化也是B的实例化
  • 相关阅读:
    一个网站需求说明书的示例
    产品设计与PRD介绍
    研发效能度量案例
    项目管理过程流程图
    变量 $cfg['TempDir'] (./tmp/)无法访问。phpMyAdmin无法缓存模板文件,所以会运行缓慢。
    wordpress函数大全列表整理
    PCLZIP_ERR_BAD_FORMAT (-10) : Unable to find End of Central Dir Record signature
    通过写脚本的方式自动获取JVM内的进程堆栈信息等内容
    简单定位占用最高CPU的java进程信息
    使用linux上面powershell安装vm powercli 连接vcenter 通过计划任务自动创建部分虚拟机的快照以及自动清理过期快照的办法
  • 原文地址:https://www.cnblogs.com/da-peng/p/5122805.html
Copyright © 2011-2022 走看看