菜鸟问问
import java.awt.*;
import java.awt.event.*;
public class TestTextListener {
public static void main(String[] args) {
new myFrame();
}
public class myFrame extends Frame implements TextListener {
TextField text1,text2;
public myFrame(){
setTitle("TestTextListener");
setBounds(200,300,100,200);
setVisible(true);
setLayout(null);
text1 = new TextField(20);
text2 = new TextField(20);
text1.addTextListener(this);
add(text1);add(text2);
}
public void textValueChanged(TextEvent e){
if(e.getSource() == text1)
text2.setText(text1.getText());
}
}
}
请问程序错在哪里?怎么修改?
------解决方案-------------------- main方法中要这样实例化内部类:
public static void main(String[] args) {
new TestTextListener().new myFrame();
}
------解决方案--------------------不要用内部类就好了。
------解决方案--------------------main方法中要这样实例化内部类:
public static void main(String[] args) {
new TestTextListener().new myFrame();
}
如果实现监听的话 一般你写到外边单独的class 好吗?
这么写的话 不方便维护 和 其他人扩展的
------解决方案--------------------main方法中不能这样实例化内部类:
public static void main(String[] args) {
new myFrame();
}
main方法中应该这样实例化内部类:
public static void main(String[] args) {
new TestTextListener().new myFrame();
}
简单的说,内部(inner)类指那些类定义代码被置于其它类定义中的类;而对于一般的、类定义代码不嵌套在其它类定义中的类,称为顶层(top-level)类。对于一个内部类,包含其定义代码的类称为它的外部(outer)类。 1 Static member class(静态成员类) 类声明中包含“static”关键字的内部类。如以下示例代码, Inner1/Inner2/Inner3/Inner4就是Outer的四个静态成员类。静态成员类的使用方式与一般顶层类的使用方式基本相同。
1内部类的嵌套可以理解成类的链关系,在构造一个内部类(非static)的实例的时候,会将直接外层类的实例
作为参数传进构造函数,而外层类的实例也是用其外层类的实例构造,所以是一种链状关系,内部的类可以使用所有
外层的类的实例,而外层的类不能使用内层的类, 应用a.this(最外层类实例) ,a.b.c.this(链中某个外层的实例)。
class TheOuter{
class kk {
class gg {
int tt = 100;
}
}
class aa {
class bb {
int jj = 10;
class cc {
{ int ff = TheOuter.aa.bb.this.jj;
// 无法直接访问到gg不在链关系内
System.out.println(ff);
}
}
}
}
}
2 创建一个内部类 new aa().new bb().new()cc 实际上是调用 外层类实例.new 本层构造函数()
如果内部类是static的不需要外层类的实例 多个static嵌套的内部类的实例 aa.bb.cc test = new aa.bb.cc();
3
class a0 {
class b0 {
}
}
class vvv{
class ff extends a0.b0 {// ff这里不是内部类也行
ff(a0 kk){
kk.super();
}
}
}
继承自内部类要调用父类的外层类的super()
4
class dd {
void print(){
System.out.println("dd.println is there");
}
class kk {
kk(int i){}
class cc {
void pp() {
System.out.println("****");
}
void ddpp() {
dd.this.print();
}
}
}
}
class aa {
public static void main (String agrs[]) {
dd.kk.cc test = new dd().new kk(10).new cc();
test.ddpp();
}
}
在类内部可以是使用外层类,但是如果生成一个实例的句柄就没有提供访问上层类的功能。
5 this 是指本类的实例
6 缺省的new
class cc {
{
new test();
}
class kk {
{
System.out.println("there kk");
}
}
class test {
{
new kk();
}
class kk {
{
System.out.println("there test_kk");
}
}
}
}
可以直接使用new,new的范围可以是 之际外层.this.new 和this.new 但是如果内层与外层出现同名类以内部优先
7
//当有链关系的时候要注意类不要重名
class vv {
class bb {} //!
class kk {
//class vv{} 这样就会出错
class bb {} //!这样就不会出错
}
}