版主看到,请帮忙解决一下
请看一下这个程序public class Person6
{
static int count=0;
protected String name;
protected int age;
public Person6(String n1,int a1)
{
name = n1;
age = a1;
this.count++; //超类对象计数
}
public String toString()
{
return this.name+", "+this.age;
}
public void print()
{
System.out.println("本类名="+this.getClass().getName()+" "+
"超类名="+this.getClass().getSuperclass().getName()+" ");
System.out.print("Person6.count="+this.count+" ");
System.out.print("Student6.count="+Student6.count+" ");
Object s1=this;
if (s1 instanceof Person6) //判断对象属于哪个类
System.out.println(s1.toString()+"是Person6类对象。");
if (s1 instanceof Student6)
System.out.println(s1.toString()+"是Student6类对象。");
}
}
class Student6 extends Person6
{
static int count=0; //隐藏了超类的count
protected String dept;
protected Student6(String n1,int a1,String d1)
{
super(n1,a1); //调用超类的构造方法
dept = d1;
this.count++; //子类对象计数
}
public String toString() //覆盖超类的同名方法
{
return super.toString() +", " + dept; //调用超类的同名方法
}
public void print()
{
super.print(); //调用超类的方法
System.out.println("super.count = "+super.count); //引用超类变量
System.out.println("this.count = "+this.count);
}
public static void main(String args[])
{
Person6 p1 = new Person6("王小明",21) ;
p1.print();
Student6 s1 = new Student6("陈小瑞",19,"计算机系");
s1.print();
}
}
当调用完s1.print()后person6中的System.out.print("Person6.count="+this.count+" ");中的this为什么是指向person6这个类,而System.out.println("本类名="+this.getClass().getName()+" "+
"超类名="+this.getClass().getSuperclass().getName()+" ");和 Object s1=this;
中的this却是指向student5这个类,我想问一下哪位大哥,这里的几个this 有何不同
----------------解决方案--------------------------------------------------------
我将没有必要的 this 都去掉了。
当在 contructor 内是没有必要用this 的。
在某个函数内, 如果用到 this , 那个这个 this 是指当前调用该函数的 object
一般在用IDE 写程序的时候,很多程序员由于记不住那些Api 的名称,即便是自己开发的,函数一多,就很难记忆,
但是IDE 提供了一个提示的方法,那就是先写出 Object 名称,然后加一点,这时你就看到一个 可以 调用的 Api表,这样程序员只要从中挑一个出来就可以,是不是很方便?所以很多程序员就利用了这个方便。用一个this然后加一点,他就可以看到那些可以调用的函数名了,同样的, 利用super 也可以起到这样的效果。
[CODE]
class Person6
{
static int count=0;
protected String name;
protected int age;
public Person6(String n1,int a1)
{
name = n1;
age = a1;
count++; //超类对象计数
}
public String toString()
{
return name+", "+age;
}
public void print()
{
System.out.println("本类名="+getClass().getName()+" "+
"超类名="+getClass().getSuperclass().getName()+" ");
System.out.print("Person6.count="+ count+" ");
System.out.print("Student6.count="+Student6.count+" ");
if (this instanceofPerson6) //判断对象属于哪个类
System.out.println(this.toString()+"是Person6类对象。");
if (this instanceof Student6)
System.out.println(this.toString()+"是Student6类对象。");
}
}
class Student6 extends Person6
{
static intcount=0; //隐藏了超类的count
protected String dept;
protected Student6(String n1,int a1,String d1)
{
super(n1,a1); //调用超类的构造方法
dept = d1;
count++; //子类对象计数
}
public StringtoString() //覆盖超类的同名方法
{
return super.toString() +", " + dept; //调用超类的同名方法
}
public void print()
{
super.print(); //调用超类的方法
System.out.println("super.count = "+super.count); //引用超类变量
System.out.println("this.count = "+count);
}
public static void main(String args[])
{
Person6 p1 = new Person6("王小明",21) ;
p1.print();
Student6 s1 = new Student6("陈小瑞",19,"计算机系");
s1.print();
}
}
[/CODE]
----------------解决方案--------------------------------------------------------
多谢版主提示,,以后应该多向你们学习
----------------解决方案--------------------------------------------------------