我有2个这样的课程:
父类A:
public class A {
public interface A2 {
}
}
B级儿童:
public class B extends A {
}
当我使用A的内部接口时:
import com.company.A.A2; //statement 1
import com.company.B.A2; //statement 2 -> error here!
//...
com.company.A.A2 a21; //statement 3
com.company.B.A2 a22; //statement 4
除我标记的语句(语句2 )外,所有语句均有效。我想知道:
PS: 我知道com.company.A.A2和com.company.A.A2是1类的2个别名。
答案 0 :(得分:1)
JLS 6.7, Fully Qualified Names and Canonical Names(已抓取)
每个成员类,成员接口和数组类型可能具有完全限定的名称:
当且仅当C具有完全限定名称时,另一个类或接口C的成员类或成员接口M才具有完全限定名称。
在这种情况下,M的完全限定名称由C的完全限定名称组成,后跟“。”,然后是M的简单名称。
每个成员类,成员接口和数组类型都可以具有规范名称:
在另一个类或接口C中声明的成员类或成员接口M仅当C具有规范名称时才具有规范名称。
在这种情况下,M的规范名称由C的规范名称组成,后跟“。”,然后是M的简单名称。
示例6.7-2特别注意您的示例中的*.A.A2
和*.B.A2
都是该接口的FQN,但是只有*.A.A2
是规范的名称因为那是A2
被声明的地方。
- 单一类型导入声明(第7.5.1节)通过提及其规范名称(第6.7节)来导入单个命名类型。