- /*
- super和this的区别:
- 1.this始终是指向本类的成员:
- 1).访问本类的成员;
- class A{
- int num = 10;
- void f1(){
- System.out.println("num = " + this.num);
- this.f2();//调用本类的f2()方法
- }
- void f2(){
- }
- }
- 2).在本类的构造方法中,调用本类其它的构造方法;
- class A{
- A(){
- System.out.println("a1");
-
- }
- A(int b){
- this();//调用此类无参的构造方法;它必须是这个构造方法的第一条有效语句;
- System.out.println("a2");
- }
- }
- main(){
- A a = new A(2);
- }
- 2.super始终是指向父类的空间:
- 1.通过super可以访问父类的成员:
- (重点) 2.可以调用父类的构造方法;
- 3.在子类中的构造方法,默认情况下会在第一行自动添加一句:super();//调用父类的无参的构造方法;
- 4.注意:
- 如果父类没有无参的构造方法,那么子类的构造方法中,就必须使用super()去显示的去调用父类的某个
- 带参的构造方法;
- 5.在子类的构造方法中调用父类的构造方法使用super().这里也要求super()必须是这个构造方法的第一句话;
- 6.在子类的构造方法中,不能即使用this()又使用super();因为都需要在第一句话;
-
- 小结:
- 1.this可以访问本类成员属性和成员方法;调用本类其它构造方法
- 2.super可以访问父类的成员属性和成员方法;调用父类的构造方法;
- 3.有一个时候,需要我们在子类中必须显示的使用super()去调用父类的构造方法:
- 当父类没有无参构造方法时:
- class A{
- A(int a){
- }
- }
- class B extends A{
- //不论子类中有多少个构造方法,每个构造方法内都要显示的去super(),调用父类带参构造方法;
- B(int n){
- super(n);
- }
- }
- */
- class A{
- int num = 10;
-
- A(int b){
- // this();//调用此类无参的构造方法;它必须是这个构造方法的第一条有效语句;
- System.out.println("a2");
- }
- void fun(){
- System.out.println("父类的fun()方法");
- }
- }
- class B extends A
- {
-
- B(int n){
- super(n);//调用了父类的带一个int参数的构造方法;
- // this("aaa");
- }
- B(String a ){
- }
- int num = 20;
- void show(){
- System.out.println("num = " + super.num);//父类的num
- super.fun();//父类的fun()方法
- }
- }
- class Demo
- {
- public static void main(String[] args)
- {
- // new B().show();
- new B(20);
-
- }
- }
复制代码
|
|