首页 > 编程知识 正文

java中的重载和覆盖,java覆盖与重载的关系

时间:2023-05-05 13:39:25 阅读:158098 作者:415

过载Overloading的发生要素如下。

1 .在同一作用范围内(同一类、同一接口) ) ) ) ) ) ) )。

2 .方法名称必须相同

3 .形参组成不同(类型、个数均不同的or个数相同,但类型不同的or类型相同的个数不同) )。

错误的认识:

1 .方法名称相同、波形参数结构完全相同、返回类型不同仍重载的波形参数结构(方法的重载要求方法具有不同的签名),返回值不被认为是签名内容,因此不涉及重载的选择

2. abstract修饰如果不存在就不是重载方法(无所谓啦,修饰子惹谁生气了? ) )

abstractclassabstractbase { abstractvoidadd (; abstractvoidadd(inta; //okvoidadd(stringb ) }//okintadd (stringb ) {} //NO! 呃! 呃! 编译是用protectedvoidadd(inta,int b ) { }复盖/覆盖/不复盖) (一个意思! ) (Overriding/Overwrite )发生要素如下。

1 .在不同的作用范围内(继承另一个类并实现接口) )。

2 .方法名称相同(无厘头! ) )

3 .形参组成相同(类型、个数均相同) )。

4 .返回类型相同

个人理解:

1 .既然要涵盖,就要完全涵盖,学得像点一样,方法的外表要看起来一样。

2 .实现接口方法,也称为覆盖,只是将整个空方法覆盖到具体的代码中。 想想也想想。 实现接口时,IDE是否自动为您添加了@Override注释? 这在JDK6之前的版本中是不行的。 写这个评论会出错。 (我很怀念在老巢运营JDK1.5项目的时候) )。

需要注意的是:派生方法不能比基类方法涉及范围更广的异常(速记:孩子不能闯比父母更大的祸) )、

错误示例:基类方法throws IOException,派生方法throws Exception。

派生方法不能有比基类方法更大的访问度(速记:孩子不能比父母显著)、

错误示例:基类的方法是protected,但派生方法是public。

要隐藏隐藏隐藏的发生器元素:

1 .同盖的1.2.3.4条件(

2 .仅在静态方法中发生

要点:

如果隐藏,则不需要修饰@Override注释,并报告错误。 此外,派生方法的可抛出异常范围和可访问范围的约束与覆盖相同(不能抛出更多的异常或具有更多的访问权限)。

在jls11文档中,隐藏被指定为by Class Methods,但封面是by Instance Methods。 这个我很清楚。 静态成员方法属于这个类。 隐藏也称为类的方法覆盖。

个人理解:因为静态方法与类联系在一起,所以实例化时使用谁的类型的引用? 那么,来自call的方法是谁的实现呢? 虽然说法可能不恰当,但请看下面的例子:

class super { staticstringgreeting () } { return ' good night '; } String name () { return 'Richard ); } classsubextendssuper { staticstringgreeting () { return 'Hello ); } String name () { return 'Kick ); } classtest { publicstaticvoidmain (string [ ] args ) { Super s=new Sub ); system.out.println(s.greeting (),' s.name ) ); //输出: Goodnight,Kick Sub s2=new Sub (; system.out.println(S2.greeting (),' s.name ) ); //输出: Hello,Kick } }的类型为Super,因此greeting ()执行了Super的实现,但name ) )是正常的覆盖,派生类为greeting ) )没有被改写但是,s2 call到达是Sub的实现,符合通常的想法。

正文参考: jsl11文档

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。