public class A{ public void fa(){
System.out.println("class A : function fa");
}
public void fb(){
System.out.println("class B: function fb");
this.fa();//我想问的是这里的fa()是否一定调用的是A类中的fa();
}}
System.out.println("class A : function fa");
}
public void fb(){
System.out.println("class B: function fb");
this.fa();//我想问的是这里的fa()是否一定调用的是A类中的fa();
}}
public class SomeThing { public static void main(String[] args) {
A ao=new B();
ao.fb();
}
static public class A{
public void fa(){
System.out.println( "class A : function fa "); }
public void fb(){
System.out.println( "class B: function fb ");
this.fa();
}
}
static public class B extends A{
public void fa(){
System.out.println( "class B : function fa "); }
}
}输出:
______
class B: function fb
class B : function fa
______用类B继承类A,并覆盖fa()方法。
这时用类A的引用来调用this.fa(),
实际调用的是类B的方法,也就是子类的方法,而不是类A的方法。
你们老师说得对。 this.fa();//不一定调用的是A类中的fa();
例如:类B 从A类继承并重写了fa()方法(注意:没有重写fb()方法),则:
A a=new B();
a.fb();//此时fb()当中调用的this.fa();就是重写的那个fa()了。
System.out.println("class A : function fa ");
} public void fb() {
//System.out.println("class B: function fb ");
this.fa();//我想问的是这里的fa()是否一定调用的是A类中的fa();
}
}class B extends A { @Override
public void fa() {
System.out.println("class B : function fb ");
}
}public class Main { public static void main(String args[]) {
B a = new B();
a.fb();
System.out.println("----------");
A b=a;
b.fb();
System.out.println("----------");
A c=new A();
c.fb();
}
}
/*
run:
class B : function fb
----------
class B : function fb
----------
class A : function fa
成功生成(总时间:0 秒)*/
指的是调用当前对象的方法,
也就是说你new出的是哪个就调用哪个
public class Test{
public static void main(String[] args){
A a = new B();
a.fb();
}}class A{
public int a =1;
public void fa(){
System.out.println("class A: function fa running....");
}
public void fb(){
System.out.println("class A: function fb running...");
this.fa(); //这里的fa()方法是类B的
System.out.println(this.a); //为什么这里的变量a又是类A的,这里的this不是代表 同一个实例吗?
System.out.println("class A: function fb stop ...");
}}class B extends A{
public int a =2;
public void fa(){
System.out.println("class B: function fa runntin...");
}
public void fb(){
System.out.println("class B: function fb running...");
System.out.println(this.a);
super.fb();
System.out.println("class B: function fb stop ...");
}}
2.当你创建一个子类继承了A类并覆盖了A类的方法,那么在运行时this.fa();指的就是子类的实例。