繁体   English   中英

如果内部类具有与外部类同名的函数,它是否在C ++和Java中隐藏了重写或重载?

[英]If an inner class has a function with the same name as an outer class, is it hiding overriding or overloading in C++ and Java?

如果内部类具有与外部类同名的函数,它是隐藏重写还是重载?

我说的是这样的情况(本地类):

class A{
    void f(){
        class B{
            void g(){..}
            ...
        }
    }
    void g() {...}
}

我似乎找不到答案。

您能否指出匿名类,静态类,内部类和本地类之间的答案是否有所不同?

关于C ++中的嵌套类的问题的答案是什么?

对于Java,答案在您命名的所有情况下都是隐藏的 但是,您仍然可以使用以下语法从内部上下文访问外部方法: A.this.g()

注意 :我刚刚注意到问题在询问两种非常不同的语言。 这个答案只涵盖C ++; 我不知道它是否适用于Java。

隐藏的是重载还是重载?

它是隐藏的 :您在内部范围中声明的内容与外部范围中的名称相同。 尽管可以作为合格名称A::g来访问外部作用域中的名称,但该名称不再可以通过非限定查找来访问。

当派生类在基类中声明与虚函数具有相同名称和兼容参数的函数时,会发生覆盖 (除了隐藏)。

当您在同一作用域中声明多个具有相同名称(但参数不同)的函数时,就会发生重载

您能否指出匿名类,静态类,内部类和本地类之间的答案是否有所不同?

没有区别(在C ++中也没有“静态类”之类的东西)。 所有类都在声明它们的范围内引入自己的范围。

关于C ++中的嵌套类的问题的答案是什么?

一模一样。 嵌套类的作用域在外部类内部,在那里声明的名称将在外部作用域中隐藏名称。

如果内部类具有与外部类同名的函数,它是隐藏重写还是重载?

当您在嵌套范围中定义某些内容时,在外部范围中定义某些内容时,这是隐藏的。

您能否指出匿名类,静态类,内部类和本地类之间的答案是否有所不同?

它完全基于范围规则。 一个简单的例子是

private final int i;

public void method() {
   long i = 1234; // local variable `i` hides the field.

除非嵌套类扩展了外部类(在这种情况下它会覆盖两种语言),否则它是隐藏的。 匿名/静态/本地没有任何区别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM