override 订阅
override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。 展开全文
override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。
信息
外文名
override
要    求
需要实现接口声明的所有方法
含    义
覆盖了一个方法并且对其重写
中文名
覆盖
override注意事项
在覆盖要注意以下的几点:1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。使用重载要注意以下的几点1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(同一方法内,参数类型参数类型不同的情况下才考虑参数顺序.比如fun(int a,int b)和fun(int b,int a)则是同样的方法,不能算作重载);2、不能通过访问权限、返回类型、抛出的异常进行重载;3、方法的异常类型和数目不会对重载造成影响;4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
收起全文
精华内容
下载资源
问答
  • 2022-02-10 16:57:59

    @Override是Java的元数据,自动加上去的一个标志,告诉你说下面这个方法是从父类/接口 继承过来的,需要你重写一次,这样就可以方便你阅读,也不怕会忘记

    @override注释在jdk1.5环境下只能用于对继承的类的方法的重写,而不能用于对实现的接口中的方法的实现。

    @Override是伪代码,表示重写。(当然不写@Override也可以),不过写上有如下好处: 
    1、可以当注释用,方便阅读;
    2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。例如,你如果没写@Override,而你下面的方法名又写错了,这时你的编译器是可以编译通过的,因为编译器以为这个方法是你的子类中自己增加的方法。
     
    举例:在重写父类的onCreate时,在方法前面加上@Override 系统可以帮你检查方法的正确性。
    @Override
    public void onCreate(Bundle savedInstanceState)

    {…….}
    这种写法是正确的,如果你写成:

    @Override
    public void oncreate(Bundle savedInstanceState)
    {…….}
    编译器会报如下错误:The method oncreate(Bundle) of type HelloWorld must override or implement a supertype method,以确保你正确重写onCreate方法(因为oncreate应该为onCreate)。

    而如果你不加@Override,则编译器将不会检测出错误,而是会认为你为子类定义了一个新方法:oncreate。

    按shift+alt+s,然后选覆盖/实现方法

    更多相关内容
  • 现象: … java: 1801: method does not override a method from its superclass @Override… 原因: Eclipse is defaulting to Java 1.5 and you have classes implementing interface methods (which in Java 1.6 ...
  • override 说明符 可使用 override 关键字来指定在基类中重写虚函数的成员函数。 语法 function-declaration override; 备注 override 仅在成员函数声明之后使用时才是区分上下文的且具有特殊含义;否则,它不是...
  • 主要介绍了详解Java中@Override的作用的相关资料,希望通过本文能帮助到大家,让大家理解这部分内容,需要的朋友可以参考下
  • 以下是对C++中overload,override,overwrite的区别进行了详细的分析介绍,需要的朋友可以过来参考下
  • 主要介绍了C++ override关键字使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 注意: koa-methodoverride@2.x表示koa@2.x ,将koa-methodoverride@1.x和koa@1.x koa-methodoverride@1.x使用。 用法,更多 var app = require ( 'koa' ) ( ) ; var methodOverride = require ( 'koa-method...
  • Override错误已解决

    2012-10-26 17:08:11
    在使用eclipse开发时有时会遇到Override错误,这个错误已得到解决,不信你下载个试试?
  • UVM factory机制 override机制详解

    千次阅读 2019-10-16 15:42:38
    set-type_override_by_name(initial_type_name,override_type_name bit replease=1): 主要作用:在队列 m_type_override[$] 中放入 override 信息。比如 base_type->ov1_type , base_type->ov2_type 。首次调用...
    1. factory机制

    顾名思义,factory机制(工厂机制),最大的优点是根据字符串(类名),创建该类的实例,比如下面的一个类:class my_driver extends uvm_driver;当使用factory机制时就可以根据字符串“my_driver”创建属于类my_driver的一个实例。还有另一种解释是factory机制本质上是对new函数的重载,从某种意义上也确实是这么回事。实现factory机制需要将类(严谨一点的话与这个类相关的uvm_object_registry或者uvm_component_registry)注册到factory中,通常会调用UVM自带的宏注册。

    宏注册主要是`uvm_object_utiles(T)  `uvm_object_param_utils(T)`uvm_component_utiles(T)  `uvm_component_param_utils(T)四个宏,在使用UVM的过程中原则上对所有的class均需要进行factory注册。

    在上面我们有讲到,严格意义上向factory中注册的是与类T相关的uvm_object_registery#()或者uvm_component_registery#()的代理类。这两个类均继承与uvm_object_wrapper,这个类是一个virtual class。这里面有3virtual 方法,create_objectcreate_component,get_type_name。在两个继承类中需要进行重载,同时这两个继承类会新建方法createset_type_overvide, set_inst_override,get。这些方法均为static,我们在使用override的时候除了调用component自身的override方法之外,还可以使用::type_id::*的方法实现,当然这种使用方法很少见,一般不会这么费事的使用,毕竟UVM已经给我们封装好了。下面我们讲解一下其中的一个宏注册,`uvm_object_utiles(T)。

    class T extends uvm_object;
    `uvm_object_utils(T)
    endclass
    下面我们将宏所表示的代码全部展开
    class T extends uvm_object;
    
       typedef uvm_object_registry#(T,"T") type_id; 
       static function type_id get_type(); 
         return type_id::get(); 
       endfunction 
       virtual function uvm_object_wrapper get_object_type(); 
         return type_id::get(); 
       endfunction
       
       function uvm_object create (string name=""); 
         T tmp; 
         `ifdef UVM_OBJECT_DO_NOT_NEED_CONSTRUCTOR 
         tmp = new(); 
         if (name!="") 
           tmp.set_name(name); 
         `else 
         if (name=="") tmp = new(); 
         else tmp = new(name); 
         `endif 
         return tmp; 
       endfunction
       
       const static string type_name = "T"; 
       virtual function string get_type_name (); 
         return type_name; 
       endfunction 
       
       function void __m_uvm_field_automation (uvm_object tmp_data__, 
                                         int what__, 
                                         string str__); 
       begin 
         T local_data__; /* Used for copy and compare */ 
         typedef T ___local_type____; 
         string string_aa_key; /* Used for associative array lookups */ 
         uvm_object __current_scopes[$]; 
         if(what__ inside {UVM_SETINT,UVM_SETSTR,UVM_SETOBJ}) begin 
            if(__m_uvm_status_container.m_do_cycle_check(this)) begin 
                return; 
            end 
            else 
                __current_scopes=__m_uvm_status_container.m_uvm_cycle_scopes; 
         end 
         super.__m_uvm_field_automation(tmp_data__, what__, str__); 
         /* Type is verified by uvm_object::compare() */ 
         if(tmp_data__ != null) 
           /* Allow objects in same hierarchy to be copied/compared */ 
           if(!$cast(local_data__, tmp_data__)) return;
    	   
    	end 
       endfunction 
       
    endclass

     

     现在是不是一目了然了,在使用的过程中T::tyepe_id::create::就是来自这里。其中tyep_id是类T的一个成员变量,createuvm_object_regisrty#T”T”)的static方法。

    那么是怎么实现向factory注册呢,在uvm_object_registry中有一个静态变量me,利用静态方法getfactory中注册,通过调用factoryregister方法实现注册。最终会在factorym_type_namesm_type两个联合数据中注册记录。注意不要尝试对同一个类进行多次注册,如果出现的话factory会提示已经注册了(以warning的报告出现),当然了一般也没有人会这么干。

    1. override机制

    其实我们会发现UVM之所以实现factory机制,本质是为了实现平台代码最大的复用性,最主要的用法都集中在override机制方面,下面将会讲解一下override机制。

    Override机制是factory机制优势最大的体现

    Set_type_override_by_type(initial_type,override_type bit replease=1):

    主要作用,在队列m_type_override[$]中放入override信息。比如base_type->ov1_typebase_type->ov2_type。首次调用的话ov1-type overridebase_type。如果第二次再调用ov2_type  override base,如果参数replease=1(默认参数),那么最终base_typeov2_type 覆盖。如果参数replease=1,则覆盖失败。

    set-type_override_by_name(initial_type_name,override_type_name bit replease=1):

    主要作用:在队列m_type_override[$]中放入override信息。比如base_type->ov1_typebase_type->ov2_type。首次调用的话ov1-type overridebase_type。如果第二次再调用ov2_type  override base,如果参数replease=1(默认参数),那么最终base_typeov2_type 覆盖。如果参数replease=1,则覆盖失败。注意这个函数传入的参数是类名字符串,不是类型。这个方法会根据传入的类名字符串去m_type_name[$]联合数组中寻找与这个类关联的代理类,然后获得代理类,接着执行与Set_type_override_by_type相同的操作。在这个override操作中海油一个要注意的是如果传入的initial_type_namem_type_name[$]没有找到代理类,那么会在联合数组m_lookup_strs[string]中做出标记

    Set_inst_override_by_type(initial_type,override_type full_inst_path):

    这个是路径替换,特定UVM路径下类的替换,联合数组uvm_factory_queue_class m_inst_override_queues[uvm_object_wrapper],这种类型inst的特换没有replease的概念,但是又路径的概念,所以出现了uvm_factory_queue_class(就是一个queue,存放的是override信息,不同元素的区别在于不同的路径,同一个路径不会多次override(会先判断))

    set_inst_override_by_name(initial_type_name,override_type_name full_inst_path):

    也是路径特换,有3个重要的变量   uvm_factory_queue_class m_inst_override_queues[uvm_object_wrapper]    m_wildcard_inst_overrides[$],uvm_factory_queue_class m_inst_override_name_queues[string]

    如果传入的参数string完整,则在m_inst_override_queues插入记录

    如果传入的参数string不完整,但是又通配符,则在m_wildcard_inst_overrides[$]插入记录,同时通配符还匹配完成字符串,同时在m_inst_override_queues插入记录

    如果传入的参数及不完整,有没有通配符,则在m_inst_override_name_queues插入记录

     

    所有与override相关的队列或者联合数组均会在使用factory机制创建时被使用(遍历使用)

    find_override_by_type(request_type,full_inst_path)

    主要作用:在create_object_by_typecreate_component_by_type中被调用,寻找真正要创建的对象的类型。如果是之前type_override的话,直接遍历m_type_override[$](比如base_type->ov1_type,传进来的是base_type的代理类类型,发现m_type_override[$]中存在ov1_type覆盖base_type的情况,那么再次调用Find_override_by_type(request_type,full_inst_path),只是传输的是ov1_type的代理类类型,发现m_type_override[$]不存在ov1_type的覆盖,返回ov1_type的代理类型如果base_type->ov1_type->ov2_type。那么最终返回的是ov2_type。以此类推)

    如果是之前inst_override的话,直接遍历m_inst_override_queus联合数组,找到init_type类型的元素,下面对这个元素的queue中的path进行匹配base_type->ov1_type(带path,匹配上的话,载次调用Find_override_by_type(request_type,full_inst_path),只是传输的是ov1_type的代理类类型,发现m_inst_override_queus没有匹配的,最终返回ov1_type。如果base_type->ov1_type->ov2_type。那么最终返回的是ov2_type。以此类推。注意一定要path匹配。

     

    find_override_by_name(request_type-name,full_inst_path)

    这个方法和上面的方法相似,内部还会调用Find_override_by_type。主要是根据参数request_type-name获取类型。如果是type_override。遍历m_type_override[$]寻找。如果是inst_override,根据参数request_type-name,会在与inst overroide相关的联合数组或者队列中查看是否可以寻找到,寻找到的话(匹配上的话,调用Find_override_by_type)。如果之中找到name匹配的地方,返回null

     

     

     

    1. factory机制对象的创建

    下面是怎么使用factory创建对象的:

    Create_object_by_type(request_type,parent_inst_path,name)

    调用find_override_by_type->create_object

    Create_object_by_type(request_type_name,parent_inst_path,name)

    调用find_override_by_name->create_object。如果find_override_by_name返回null,没有override或者没有找到override的匹配信息。这个实在在m_type_name中看看是否注册是,没有的话番薯直接返回null(没有注册的话当然不能使用factory机制创建)

    Create_object_by_type(request_type,parent_inst_path,nameparent)

    调用find_override_by_type->create_object

    Create_object_by_type(request_type_name,parent_inst_path,nameparent)

    调用find_override_by_name->create_object。如果find_override_by_name返回null,没有override或者没有找到override的匹配信息。这个实在在m_type_name中看看是否注册是,没有的话番薯直接返回null(没有注册的话当然不能使用factory机制创建)

     

     

     

     

     

     

    展开全文
  • @Override飘红

    2022-04-29 11:48:04
    @Override是JDK自带的注解,表示方法的重写 具体报错行为,可能会表现为@Override飘红,或者编译时发出警告Error:java: 无效的标记: -parameters 此时应检查pom文件的标签有没有提示爆红 并检查编译版本...

    @Override是JDK自带的注解,表示方法的重写

    具体报错行为,可能会表现为@Override飘红,或者编译时发出警告Error:java: 无效的标记: -parameters

    1  此时应检查pom文件的标签有没有提示爆红

    2  并检查编译版本是否太低导致的,只需要在pom文件中指定编译的版本是1.8即可。

    3 检查IDEA的moudles

    展开全文
  • C# override详解

    千次阅读 2020-06-14 20:27:15
    重载、重写、覆写,分别指的是overload、override、new。 一、override重写,是在子类中重写父类中的方法,两个函数的函数特征(函数名、参数类型与个数)相同。用于扩展或修改继承的方法、属性、索引器或事件的...

    重载、重写、覆写,分别指的是overload、override、new。

    一、override重写,是在子类中重写父类中的方法,两个函数的函数特征(函数名、参数类型与个数)相同。用于扩展或修改继承的方法、属性、索引器或事件的抽象或虚拟实现。提供从基类继承的成员的新实现,而通过override声明重写的方法称为基方法。
    注意事项:
    1.重写基方法必须具有与override方法相同的签名。
    2.override声明不能更改virtual方法的可访问性,且override方法与virtual方法必须具有相同级别访问修饰符。
    3.不能用new、static、virtual修饰符修改override方法。
    4.重写属性声明必须指定与继承的属性完全相同的访问修饰符、类型和名称。
    5.重写的属性必须是virtual、abstract或override。
    6.不能重写非虚方法或静态方法。
    7.父类中有abstract,那么子类同名方法必定有override,若父类中有 virtual方法,子类同名方法不一定是override,可能是overload。
    8.override必定有父子类关系。

    二、overload重载,在同一个类中方法名相同、参数或返回值不同的多个方法即为方法重载。
    注意事项:
    1.出现在同一个类中。
    2.参数列表不同或返回类型和参数列表都不同,只有返回类型不同不能重载。(参数列表包括参数个数和参数类型)

    三、overwrite覆写,用new实现。在子类中用 new 关键字修饰定义的与父类中同名的方法,也称为覆盖,覆盖不会改变父类方法的功能。

    示例:

    class Parent
    {
        public void F()
        {
            Console.WriteLine("Parent.F()");
        }
        public virtual void G() //抽象方法
        {
            Console.WriteLine("Parent.G()");
        }
        public int Add(int x, int y)
        {
            return x + y;
        }
        public float Add(float x, float y) //重载(overload)Add函数
        {
            return x + y;
        }
    }
    class ChildOne:Parent //子类一继承父类
    {
        new public void F() //覆写(overwrite)父类函数
        {
            Console.WriteLine("ChildOne.F()"); 
        }
        public override void G() //重写(override)父类虚函数,主要实现多态
        {
            Console.WriteLine("ChildOne.G()");
        }
    }
    class ChildTwo:Parent //子类二继承父类
    {
        new public void F()
        {
            Console.WriteLine("ChildTwo.F()");
        }
        public override void G()
        {
            Console.WriteLine("ChildTwo.G()");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Parent childOne = new ChildOne();
            Parent childTwo = new ChildTwo();
            //调用Parent.F()
            childOne.F();
            childTwo.F();
            //实现多态
            childOne.G();
            childTwo.G();
            Parent load = new Parent();
            //重载(overload)
            Console.WriteLine(load.Add(1, 2));
            Console.WriteLine(load.Add(3.4f, 4.5f));
            Console.Read();
        }
    }
     

    展开全文
  • JAVA中 @Override 的作用

    千次阅读 2021-02-28 06:41:41
    } Child.javapublic class Child extends Parent implements IChild ...{ @Override public void parentMethod() ...{ } @Override public void interfaceMethod() ...{ } } 由于代码很简单,我就不做说明 上述代码...
  • android studio中的@Override

    千次阅读 2021-06-07 04:32:12
    原文链接@Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处:1、可以当注释用,方便阅读2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错比如你如果没写@Override而你...
  • @Override注解的作用

    2021-10-17 20:21:44
    @Override注解告诉你下面这个方法是从父类/接口继承过来的,需要你重写一次,这样就可以方便你阅读,也不怕会忘记。 @Override是伪代码,表示重写(当然不写也可以),不过写上有以下优点: 1、编译器可以给你验证@...
  • c++的virtual和override作用

    千次阅读 2020-04-13 23:06:23
    c++的virtual提供了运行时的多态,是的可以用基类的指针调用子类对象的函数,通过override可以强制要求基类有对应的虚函数。 二、测试代码 #pragma once #include <stdio.h> class Base { public: void A_1...
  • @Override

    万次阅读 多人点赞 2018-07-29 19:33:13
    @Override这个标签有什么用呢。。。。。。 其实我也是比较迷茫,查了一下,三个作用吧 1. 可以给你当作注释用,感觉这个也不能说明什么,注释也没什么用。 2. 可以告诉读你代码的人,这是对它父类方法的重写,...
  • override的用法

    千次阅读 2020-08-02 15:52:56
    override用于重载父类成员函数 override关键字用于父类有虚成员函数,子类成员函数进行父类成员函数重载时,当父类没有该虚成员函数时,会进行报错. 例如: 父类:(virtual 钱包) 子类1:public 父类 钱包 ...
  • c++中 override用法

    千次阅读 2019-04-10 09:53:01
    描述:override保留字表示当前函数重写了基类的虚函数。 目的: 1.在函数比较多的情况下可以提示读者某个函数重写了基类虚函数(表示这个虚函数是从基类继承,不是派生类自己定义的); 2.强制编译器检查某个函数...
  • 简述overload、override和overwrite的区别

    千次阅读 2020-12-02 13:37:07
    overload意为重载,override意为覆盖,overwrite意为重写。从中文意思上看,并无差别,但是如下所示,给出英文定义: Overloading occurs when two or more methods in one class have the same method name but ...
  • C++ override 虚析构函数 使用技巧

    千次阅读 2021-10-13 20:19:12
    因此,作为子类的设计者,有义务提醒父类设计者,缺少关键字virtual,从而避免内存泄漏 C++11 新特性中的关键字override,编译器会检查基类中的虚函数和派生类中带有override的虚函数有没有相同的函数签名,一旦不...
  • C++11中override关键字使用

    千次阅读 2021-01-11 11:40:49
    什么是overrideoverride 是C++11引进的一个说明符,翻译为 覆盖 的意思。C++11 中的 override 关键字,可以显式的在派生类中声明,哪些成员函数需要被重写,如果没被重写,则编译器会报错。 override有什么用...
  • C++11 override

    万次阅读 多人点赞 2018-10-19 16:32:29
    C++11 之 override作用不使用override使用override 作用 在成员函数声明或定义中, override 确保该函数为虚函数并覆写来自基类的虚函数。 位置:函数调用运算符之后,函数体或纯虚函数标识 “= 0” 之前。 不...
  • Use --override to override this check. Missing recommended library: libGLU.so Missing recommended library: libX11.so Missing recommended library: libXi.so Missing recommended library: libXmu.so ...
  • C++ override使用详解

    千次阅读 2018-01-24 21:00:42
    C++ override从字面意思上,是覆盖的意思,实际上在C++中它是覆盖了一个方法并且对其重写,从而达到不同的作用。在我们C++编程过程中,最熟悉的就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在...
  • Java @Override – Java中的重写

    千次阅读 2020-07-19 15:44:52
    of type ChildClass must override or implement a supertype method Java @Override注释的好处 (Java @Override annotation benefits) Java @Override annotation will make sure any superclass changes in method...
  • 用了很久的Glide,最近在使用Glide3时突然想到一个问题,大家都知道使用Glide的override方法可以重写图片大小。而View的setLayoutParams则可以设置ImageView的大小。代码如下: //Glide的override()方法设置图片大小...
  • java中@override写不写有什么区别?

    千次阅读 2021-02-28 18:01:19
    写表示的是重写 ,不写是一般的方法@Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处:1、可以当注释用,方便阅读;2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错...
  • C++ ——一文读懂:关键字override

    千次阅读 2019-07-01 19:47:26
    override在C++中它是覆盖了一个方法并且对其重写,从而达到不同的作用。在我们C++编程过程中,最熟悉的就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。...
  • 设置Canvas的 overrideSorting不生效

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,280,081
精华内容 1,312,032
关键字:

override

友情链接: 阈值分割应用.rar