继承、super、this关键字

本文详细介绍了Java中的继承概念,包括子类继承父类的属性和行为,提高了代码复用性和类之间的关系。讲解了成员变量和方法的重名处理,特别是super关键字的使用场景,如访问父类成员变量和构造方法。此外,还阐述了方法重写(override)的规则,强调子类方法返回值必须小于等于父类,并讨论了构造方法的调用顺序。最后,提到了this关键字在访问本类内容时的应用。
摘要由CSDN通过智能技术生成

继承

继承就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以访问父类中的非私有的属性和行为
好处:
1、提高代码的复用性
2、类与类之间产生了关系,是多态的前提
通过extends关键字,可以声明一个子类继承另一个父类格式如下:
class 父类{

}
class 子类 extends 父类{

}

继承后的特点–成员变量

成员变量不重名

如果子类父类中出现不重名的成员变量,这时访问是没有影响的

成员变量重名

子父类中出现了同名的成员变量时,在子类需要访问父类中非私有成员变变量时,需要使用super关键字,修饰父类成员变量,类似于之前学过的this。使用格式:super.父类成员变量名

public class Demo01Extend {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.show();
    }
}

public class Fu {
    int num =5;
    public void show(){
        System.out.println("Fu show");
    }
}


public class Zi extends Fu{
    int num1 =20;
    int num = 6;
    public void show(){
        System.out.println("Fu num ="+super.num);//访问父类中的num
        System.out.println("Zi num ="+this.num);//访问子类中的num
        System.out.println("Zi show");
    }
}

PS:父类中的成员变量是非私有的,子类可以直接访问。若父类中的成员变量私有了,子类是不能直接访问的,通常编码时,我们遵循封装的原则,使用private修饰成员变量,那么如何访问父类的私有成员变量,可以在父类中提供公共的getXxx和SetXxx方法

继承后的特点–成员方法

成员方法不重名

如果子类父类中出现不重名的成员方法,这时是没有影响的

成员方法重名–重写(override)

方法重写:子类出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或复写。申明不变重新实现
(重载:方法名称一样,参数列表不一样)
方法覆盖重写的注意事项:
1、必须保证父子类方法的名称相同,参数列表也相同
@override写在前面,用来检测是不是有效的正确覆盖重写
这个注解就算不写,只要满足要求,也是正确的方法覆盖重写
2、子类方法的返回值必须【小于等于】父类返回值范围
小扩展提示:java.lang.object类是所有类的公共最高父类(祖宗类),java.lang.String就算Object的子类
3、子类方法权限不许【大于等于】父类方法权限修饰符
小扩展提示:public》protected>(default)>private
备注:(default)不是关键字default,而是什么都不写,留空
eg:public(权限)string(返回值范围) method(){}

继承后的特点–构造方法

继承关系中,父子类构造方法的访问特点:
1、子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行的子类构造
2、子类的构造可以通过super关键字来调用父类重载构造
3、super的父类构造调用,必须是子类构造方法的第一个语句,不能一个子类构造调用多次super构造
总结:子类必须调用父类构造方法,不写则赠送super();写了则用写的指定的super调用,super只能有一个,还必须是第一个

class Fu {
   private int n;
     Fu(){
        System.out.println("Fu()");
   }
   class Zi extends Fu {
      Zi(){
          super();// 调用父类构造方法
          System.out.println("Zi()");
       }
     }
public class ExtendsDemo07{
      public static void main (String args[]){
          Zi  zi = new Zi();
       }
 }
super关键字

super关键字的用法有三种:
1、在子类的成员方法中,访问父类的成员变量
2、在子类的成员方法中,访问父类的成员方法
3、在子类的构造方法中,访问父类的构造方法

pubic class Zi extends Fu{
  int num = 20;
  public Zi(){
      super();
   }
   public void methodZi(){
      System.out.println(super.num);
   }
   public void method(){
   super.method;//访问父类中的method
   }
 }
this关键字

super关键字用来访问父类内容,而子类关键字用来访问本类内容 用法也有三种:
1、在本类方法中,访问本类成员变量
2、在本类成员方法中,访问本类的另一个成员方法
3、在本类的构造方法中,访问本类的另一个构造方法,在使用时注意:
this(…)调用也必须是构造方法的第一个语句,唯一一个
super和this两种构造调用,不能同时使用

pubic class Zi extends Fu{
  int num = 20;
  public Zi(){
      super();//这一行不再赠送
      this(123);//本类的无参构造调用本类的有参构造
   }
   public Zi(int n){
      System.out.println(n);
   }
   public void methodZi(){
      System.out.println(super.num);
   }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值