![](/img/trans.png)
[英]Object instantiation: Inner class and outer class with the same name (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.