JAVA继承时this和super关键字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA继承时this和super关键字相关的知识,希望对你有一定的参考价值。

JAVA继承时thissuper关键字

本文主要讨论在方法前使用thissuper关键字时,编译器在什么地方查找对应的函数。

  1. 在子类中指定this关键字。首先在本类中查找,如果本类中找不到,再在父类中查找。

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

  1. 在子类中使用super,那么跳过子类查找直接从父类中查找

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

  1. 在父类中指定this关键字。和子类中指定this关键字一样,先从子类中找覆写的方法,如果找到,直接调用子类的该方法,如果没找到再从父类中寻找。

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();

}

}

 

以上是关于JAVA继承时this和super关键字的主要内容,如果未能解决你的问题,请参考以下文章

java 关于继承中的super() 方法

Java面向对象_继承思想——super关键字

四. Java继承和多态2. Java super关键字

super 在Java继承中的作用??

Java的this关键字在继承时的作用

java继承