Java中this和super关键字区别

1.  super关键字表示的是子类调用父类的中指定的操作。例如:调用属性,方法,构造等.  因为在子类实例化的时候会默认调用父类的无参构方法,如果现在希望调用友残构造,则必须在子类中明确的声明。

举例:

public class ExtDemo05 {

public static void main(String[] args){

Son2 son2 = new Son2();

son2.fun();

}

}

class Father2{

public String info = "父类Nishuibaichuan";

int age;

public Father2(){

System.out.println("父类hello,java!") ;

}

public Father2(int age){

System.out.println("小明今年:" + age ) ;

}

}

class Son2 extends Father2{

public String info = "子类Hello";

void fun(){

System.out.println("调用 的属性为:" + info) ;

System.out.println("调用 的属性为:" + super.info) ;

}

public Son2(){

super(18);

System.out.println("子类nishuibaichuan ,java!") ;

}

}

小明今年:18
子类nishuibaichuan ,java!
调用 的属性为:子类Hello
调用 的属性为:父类Nishuibaichuan


2.  比较二者区别(以下内容都是在继承的条件下成立)

(1)属性访问:

this 访问本类中的属性,如果本类中没有找到此属性,则从父类中继续查找。

super 访问父类中的属性。

(2)方法访问:

this 访问本类中的方法,如果在本类中没有此方法,则在父类中继续查找。

super 直接访问父类中的方法。

(3)调用构造方法:

this 调用本类中的构造方法,必须放在构造方法首行,他是根据不同参数个数,调用对应本类的不同参数个数的构造方法。

(4) 特殊:

this 表示当前对象

super无此概念

注:对于this 和super本身都可以调用构造方法,而且调用的时候都必须放在构造方法的首行,所以这两个关键字肯定不能同时出现!


(5)重点!

public class Abstract1 {

public static void main(String[] args){

S s = new S("nishuibaichuan",21);

}

}

class Q{

public Q(){

System.out.println("我是父类中无参构造方法!");

}

public Q(int age){

System.out.println("我是父类中有一个参构造方法!今年:" + age);

}

}

class S extends Q {

public S(){

System.out.println("我是子类无参构造方法!");

}

public S(int age){

System.out.println("我是子类有一个参构造方法!今年:" + age);

}

public S(String name,int age){

this(21);

System.out.println("我是子类有一个参构造方法!今年:" + age + ",叫:" + name);

}

}

运行结果:

我是父类中无参构造方法!
我是子类有一个参构造方法!今年:21
我是子类有一个参构造方法!今年:21,叫:nishuibaichuan

由以上运行结果可知:无论在main()中子类实例化过程中,它括号中的参数有几个(S s = new S("nishuibaichuan",21);),他都会调用父类中的无参构造方法!!!!




你可能感兴趣的:(java)