zoukankan      html  css  js  c++  java
  • 对java中对多态的简单理解

    多态即多种形态,通俗来讲就像一个人有不同身份,比如说人:生物,地球人,中国人,学生,等等。

    使用多态的前提:
     1.必须有子父类关系 (必须有继承)
     2.必须有方法的重写


     多态在java中表现形式:
     父类类型 变量名 = new 子类类型();
     即父类类型的变量 指向了 子类的对象

    多态调用成员变量时,编译运行都看父类
    多态调用成员方法时,编译看父类 运行看子类

    在这里说一下在多态中的重要的知识点:向下转型和向上转型多态就是向上转型

    使用了多态后,可以调用该子类重写了父类的方法,但是子类特有的方法是不能调用的(多态的弊端)

    解决多态的这个弊端的办法是向下转型,也就是进行强制类型转换

    向下转型也有弊端:
    把父类的变量 转成子类类型的时候 编译器会直接编译通过,但是编译运行的时候会报错

    比如说下面代码写的时候是没有问题的,运行后报错:Dog cannot be cast to Cat

    package com.polymorphic.test;
    
    public class polymorphictest {
    
        public static void main(String[] args) {
            Animal an = new Dog();            //一个类型是animal的Dog
            feedanimal.feedanimal(an);         
            Cat cc =(Cat)an;                 //向下强制转型成cat,实际上an是Dog
            cc.catchmouse();
    }
    }


     java中解决向下转型弊端的方法:
     一个关键字 instanceof 运算符

     作用: 判断某一个变量 是不是 该类的类型

    即在转换前做一个类型判断
    比如:

    package com.polymorphic.test;
    
    public class polymorphictest {
    
        public static void main(String[] args) {
            Animal an = new Dog();        
            feedanimal.feedanimal(an);    
            
            if(an instanceof Dog){
                Dog dd =(Dog)an; 
                dd.WatchHome();
                dd.eat();
            }
            if(an instanceof Cat) {
                Cat cc =(Cat)an;
                cc.catchmouse();            
            }
        }
  • 相关阅读:
    分布式文件系统 FastDFS
    Autoit里用多进程模拟多线程
    请不要做浮躁的人(新手必读!)
    如何用AU3调用自己用VC++写的dll函数
    DLL编写教程
    win32下的命令行集合 (最优秀的工具)
    autoit 《FAQ 大全》
    Windows XP 常用DOS命令
    rundll32 常用命令
    批处理的高级运用技巧
  • 原文地址:https://www.cnblogs.com/txbblog/p/10313771.html
Copyright © 2011-2022 走看看