用代码方式解释 class A { public void test1() {System.out.println("1");} public void test2() {System.out.println("2");} public void test3() {System.out.println(this.getClass());} }class B extends A { public void test4() { this.test1(); //和super.test1()一样,因为B继承A,test1也是B的方法,所以this可以调用 super.test3(); //和this.test3()一样,因为B没有重写test2方法,test2方法是继承A而来的,所以this也可以调用 System.out.println(super.getClass()); System.out.println(this.getClass()); } public void test2() { //重写test2方法 super.test2(); //这个和this.test2()就一样了,这个是调用父类的test2,不会造成递归 //this.test2(); //这个是调用子类的test2,也就是这个方法本身,会造成递归 } }
this 调用本类你把你具体代码 贴出来 然后分析下
class A {
public void test1() {System.out.println("1");}
public void test2() {System.out.println("2");}
public void test3() {System.out.println(this.getClass());}
}class B extends A {
public void test4() {
this.test1(); //和super.test1()一样,因为B继承A,test1也是B的方法,所以this可以调用
super.test3(); //和this.test3()一样,因为B没有重写test2方法,test2方法是继承A而来的,所以this也可以调用
System.out.println(super.getClass());
System.out.println(this.getClass());
} public void test2() { //重写test2方法
super.test2(); //这个和this.test2()就一样了,这个是调用父类的test2,不会造成递归
//this.test2(); //这个是调用子类的test2,也就是这个方法本身,会造成递归
}
}
集成父类,那变量如果不是private的话,在子类中当然也可以当做当前类的变量来处理,可以用this操作符,super关键字指的是调用父类的变量,如果使用super.当前类的变量就会出错了
super是一个指向该类父类的引用,如果该类不继承于任何类,那么该类调用super引用的就是Object类
this访问不到父类的,
你能访问到是因为:
子类继承了父类的属性和方法,
子类父类的属性方法都一样,
如果你在子类对这些属性方法做写改变就明白了