黑马程序员技术交流社区
标题:
匿名内部类的构造函数
[打印本页]
作者:
山水游客
时间:
2012-6-18 12:39
标题:
匿名内部类的构造函数
本帖最后由 孙胜录 于 2012-6-18 23:06 编辑
匿名内部类的构造函数怎么写?
当匿名内部类中的成员变量名和外部类的成员变量名相同时,想要在内部类中调用外部类的非静态成员变量,要怎么调?是否可以用super();
作者:
余银桂
时间:
2012-6-18 13:13
内部类的构造函数跟外部类一样
内部内要访问外部类成员,如果不同名那么外部类的变量加final
如果相同则要使用 外部类.this.变量名
作者:
唐辉辉
时间:
2012-6-18 13:28
楼主看下和运行下以下的例子,会有一些了解!
class Outer {
private int x = 3;
class Inner// 内部类
{
int x = 4;
void function() {
int x = 6;
System.out.println("innner :" + Outer.this.x);
System.out.println("innner :" + this.x);
System.out.println("innner :" + x);
}
}
/**/
void method() {
Inner in = new Inner();
in.function();
}
}
class Test{
public static void main(String[] args) {
Outer out = new Outer();
out.method();
// 直接访问内部类中的成员。
// Outer.Inner in = new Outer().new Inner();
// in.function();
}
}
作者:
常佳杰
时间:
2012-6-18 14:18
这是匿名内部类的例子:(哥们说的那个匿名内部类的构造函数应该是不能有)
public class ExamFrame extends JFrame {
public ExamFrame() {
init();
}
public ExamFrame(ClientContext context) {
this();
this.context = context;
}
public void init() {
setSize(600, 500);
setTitle("在线评测");
setContentPane(createContentPane());
//这里就使用了匿名内部类
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
context.exit(ExamFrame.this, "是否离开!");}
});
}
}
构造函数是在实例化对象时用到的,也就是给属性赋值。
如果内部类有了构造函数的话就是想要对内部类进行实例化.....下边是我对内部类的理解
内部类继承自某个类或实现某个接口,内部类的代码是对它外变类的对象(仅仅是次外层)进行操作的。所以可以认为内部类提供了某种进入其外围类的窗口。
使用内部类最吸引人的原因是:
每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。
直接访问内部类中的成员:外类名.内类名 起一个名 = new 外类名().new 内类名();
对于当匿名内部类中的成员变量名和外部类的成员变量名相同时,想要在内部类中调用外部类的非静态成员变量时
可以用:外部类.this.变量名,
至于super吧,上边说的感觉很清楚了,既然不使用构造函数,就用不着super了吧
作者:
sbeeqnui1987
时间:
2012-6-18 14:55
变量有其作用域的,如果声明在构造方法里,只是一个局部变量而已,方法外访问不到
不过有个变通的方法,你可以在构造方法里把viewScroll传递给 treeInit(),也就是treeInit改成带参数的方法
要在内部类中调用在内部类以外定义的方法,变量等需要将这些方法或者变量定义为终态final的,但是这里又出现一个问题当变量声明为final的时候是不允许改变的.为了要达到我们的目的我们需要借助数组这个东东:
比如: final int[] a = {0};
我们在内部类中使用这个数组a的0号元素. 如果我门要改变他的值只需要对a[0]改变.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2