标签:
JAVA继承时this和super关键字
本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数。
class A { public void fun() { System.out.println("父类的fun()"); } }
class B extends A { public void test() { this.fun(); }
public void fun() { System.out.println("子类中的fun()"); } }
public class Hello { public static void main(String[] args) throws Exception { B b = new B(); b.test(); } }
|
输出结果是子类中的fun。如果我们将子类中的该函数删去,那么调用的就是父类中的fun。
class A { public void fun() { System.out.println("父类的fun()"); } }
class B extends A { public void test() { this.fun(); }
// public void fun() // { // System.out.println("子类中的fun()"); // } }
public class Hello { public static void main(String[] args) throws Exception { B b = new B(); b.test(); } }
|
输出父类中的fun
class A { public void fun() { System.out.println("父类的fun()"); } }
class B extends A { public void test() { super.fun(); }
public void fun() { System.out.println("子类中的fun()"); } }
public class Hello { public static void main(String[] args) throws Exception { B b = new B(); b.test(); } }
|
输出父类中的fun
class A { public void test() { this.fun(); }
public void fun() { System.out.println("父类的fun()"); } }
class B extends A { public void fun() { System.out.println("子类中的fun()"); } }
public class Hello { public static void main(String[] args) throws Exception { B b = new B(); b.test(); } }
|
输出子类中的fun
如果此时将子类中的fun删除
class A { public void test() { this.fun(); }
public void fun() { System.out.println("父类的fun()"); } }
class B extends A { // public void fun() // { // System.out.println("子类中的fun()"); // } }
public class Hello { public static void main(String[] args) throws Exception { B b = new B(); b.test(); } }
|
输出父类中的fun
但此时有一点需要注意的是,如果修改父类的fun的访问权限为private,这时输出的就是父类中的fun
class A { public void test() { this.fun(); }
private void fun() { System.out.println("父类的fun()"); } }
class B extends A { public void fun() { System.out.println("子类中的fun()"); } }
public class Hello { public static void main(String[] args) throws Exception { B b = new B(); b.test(); } }
|
标签:
原文地址:http://www.cnblogs.com/kuillldan/p/5905618.html