日期:2014-05-20 浏览次数:20644 次
public class TestThis { public static void main(String[] args) { JavaThis jt = new JavaThis("javathis"); // 由于 Student 属于 JavaThis 的内部类,因此要生成 Student // 对象时需要在外部类对象的基础上进行 new JavaThis.Student st = jt.new Student("student"); st.show("hello"); } } class JavaThis { private String name; private int age; public JavaThis(String name) { // 构造参数名与这个类的成员变量名相同,因此在赋值需要使用 this.name = name; 表示将 // 参数中的 name 值赋给 JavaThis 对象的 name 成员变量中去 // 如果不用这个 this. 就成了 name = name; 这样很明显就是不对的了 this.name = name; } public JavaThis(String name, int a) { // 使用 this 函数? // 这里指的是调用 JavaThis 这个类中带有 String 一个参数的构造方法,也就是先调用上面 // 那个构造 this(name); // 这里由于参数名不叫 age,因此这里可以直接使用 age = a; 当然了也可以写成 this.age = a; age = a; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void show() { System.out.println("javathis name: " + name); } public class Student { private String name; public Student(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void show(String name) { // 由于方法参数中有个 name,因此这里调用 name 是方法参数中的 System.out.println("my name: " + name); // 同上,由于方法参数中有个 name,要调用自己类中的成员变量 name 时需要使用 // this.name,如果方法参数中名字不叫 name,那么这里使用 name 或者 this.name // 都是同样的效果 System.out.println("my name: " + this.name); // 由于 Student 不是静态的内部类,而且外部类中的 name 与这个类中的 name // 名字一样,因此要引用外部类中的 name 时需要使用:<外部类名>.this.<外部类成员变量名> // 如果直接写 this.name 的话,那表示是自己的 name System.out.println("out name: " + JavaThis.this.name); // 同理,由于这里想调用外部类中的 show 方法,如果直接调用或者用 this.show() 的话, // 会被认为是调用自己的 show 方法,因此需要使用:<外部类名>.this.<外部类方法> // 下面这个调用等价于: // JavaThis outer = JavaThis.this; // outer.show(); JavaThis.this.show(); } } }
------解决方案--------------------
参照Thread的带接口Runnable的构造方法 然后理解多态(父类引用指向子类对象)
------解决方案--------------------
java中的this确实比javascript中的this简单多了。。
------解决方案--------------------