内部类访问外部同名属性或者方法
2014-03-13 21:40
351 查看
如果内部类中没有与外部类同名的属性或方法,那么直接引用外部类的属性或方法即可,见Inner类的定义。
但如果存在同名的属性或方法,就要在内部类中先取得外部类的引用,通过这个引用来访问外部类的同名属性或方法。有两个方法来取得外部类的引用:
一种方法是,通过外部类的类名来取得外部类当前的引用,见Inner1类的定义;
另一种方法是,把外部类的引用显式传给内部类的构造方法,见Inner2类的定义。
可见,第一种方法简单一些。
注意:[类名.this]的用法只能在内部类中使用。
public class Test1 {
private int a = 5;
public Test1() {
new Inner().print();
new Inner1().print();
new Inner2(this).print();
}
public static void main(String[] args) {
new Test1();
}
private class Inner {
private void print() {
System.out.println("Inner直接取得外部的属性a=" + a);
System.out.println();
}
}
private class Inner1 {
private int a = 10;
private void print() {
System.out.println("Inner1的属性a=" + this.a);
System.out.println("Inner1通过第一种方法取得外部的属性a=" + Test1.this.a);
System.out.println();
}
}
private class Inner2 {
private int a = 20;
private Test1 t;
private Inner2(Test1 t) {
this.t = t;
}
private void print() {
System.out.println("Inner2的属性a=" + this.a);
System.out.println("Inner2通过第二种方法取得外部的属性a=" + this.t.a);
System.out.println();
}
}
}
但如果存在同名的属性或方法,就要在内部类中先取得外部类的引用,通过这个引用来访问外部类的同名属性或方法。有两个方法来取得外部类的引用:
一种方法是,通过外部类的类名来取得外部类当前的引用,见Inner1类的定义;
另一种方法是,把外部类的引用显式传给内部类的构造方法,见Inner2类的定义。
可见,第一种方法简单一些。
注意:[类名.this]的用法只能在内部类中使用。
public class Test1 {
private int a = 5;
public Test1() {
new Inner().print();
new Inner1().print();
new Inner2(this).print();
}
public static void main(String[] args) {
new Test1();
}
private class Inner {
private void print() {
System.out.println("Inner直接取得外部的属性a=" + a);
System.out.println();
}
}
private class Inner1 {
private int a = 10;
private void print() {
System.out.println("Inner1的属性a=" + this.a);
System.out.println("Inner1通过第一种方法取得外部的属性a=" + Test1.this.a);
System.out.println();
}
}
private class Inner2 {
private int a = 20;
private Test1 t;
private Inner2(Test1 t) {
this.t = t;
}
private void print() {
System.out.println("Inner2的属性a=" + this.a);
System.out.println("Inner2通过第二种方法取得外部的属性a=" + this.t.a);
System.out.println();
}
}
}
相关文章推荐
- java 内部类如何访问外部类的同名属性
- * 编写一个内部类,外部类为药品类,内部类为药架类,包括一个放置药品的方法,要求: * 1.外部其他类不能直接访问内部类 * 2.但外部其他类可以访问内部类的放置药品方法
- 内部类访问外部类方法中的参数-使用final
- Swift内部类调用外部类方法、属性的变通
- 外部访问 Vue 中的 methods方法及其属性
- 内部类访问外部类方法中的参数-使用final
- 内部类可以访问外部类的属性和方法吗?
- C++:调整基类成员在派生类中的访问属性的其他方法(同名成员和访问声明)
- Java匿名内部类可以访问外部类的成员;若访问所在方法的成员,那个成员必须具有final属性
- 内部类可以访问外部类的属性
- 匿名内部类访问外部类中的局部变量必须是final属性
- 求教!内部类方法与外部类方法同名,是覆盖吗?内部类对象如何调用这个同名的外部类方法?
- 匿名内部类访问外部类的实例方法的局部变量时,局部变量必须是final
- 匿名内部类访问外部类方法中的局部变量
- 2018/01/08JAVA 基础 / 接口与继承/Java关键词:变量引用 super 调用父类对象方法/构造方法【或者访问父类对象属性】的方式归纳
- 内部类的变量或者方法与外部类相同时
- 内部类对外部内成员属性以及方法的访问
- 【Java】内部类访问的外部变量定义成final (数据保持一致,外部修改后无法通知内部,编译的时候会通过构造方法传进来) Java内部类一般访问不了外部变量
- 外部类可以自由访问内部类的private方法
- 匿名内部类访问外部类中的局部变量必须是final属性