继承是当多个类中存在相同的属性和方法时,将这些内容抽取到单独的一个类中,使得这些类可以通过继承这个类来获得这些属性和方法。被继承的这个类称为父类(超类、基类),继承它的这些类称为子类。继承是一个is a的关系,即子类是一个父类。子类可以访问父类中所有非私有的属性和方法。在Java语法上通过extends 关键字来表达这种继承关系:class 子类 extends 父类。
继承的特点:1.Java只支持单继承,不支持多继承。一个类只能有一个父类,不能有多个父类。2.Java支持多重继承,即B继承A,C继承B。
继承的好处:1.提高代码的复用性。2.让类与类之间产生关系,是多态的前提。
继承中的Super和This关键字的区别:Super代表父类的存储空间,可以理解为是父类的引用,是当前子类对父类的引用。This代表的是子类的存储空间,是当前类的对象内的方法和属性的引用。Super和This的使用场景是:当父类和子类出现同名成员时,可以用Super和This进行区分。子类要调用父类构造函数时,可以在子类的构造函数中使用Super调用。Super和This都必须出现在类构造函数的第一行,且不能同时出现。
子类可以继承父类中所有非私有的属性和方法。但是Java对于子类继承过来的属性和方法具有不同的处理方式:1.对于属性,使用的是同名属性隐藏机制,所谓的同名属性隐藏机制是指:在具有父子关系的两个类中,子类中相同名字的属性会使得从父类中继承过来的同名属性变得不可见,不管类型是否一致,名称一致的两个属性就是同名属性。在子类中,无法简单地通过属性名称来获取父类中的属性,而是必须通过父类名称加属性名称(Super.strA)的方法才可以访问父类中的该属性。一般而言,为了代码容易阅读,极其不建议在父类和子类中使用同名属性。类的属性成员不能像方法成员一样被重写。当一个子类定义了一个与父类同名的属性,实际上就是子类定义了一个新的属性成员,该属性同时隐藏了父类中的同名属性。2.对于方法,使用方法的重写(覆盖)机制来实现多态,是多态的核心。
方法的重写(覆盖)
子类中出现和父类一模一样的方法时,会出现重写的操作,也称为覆盖。重写的使用场景一般是当子类需要父类的功能,而功能的主体子类又有自己特定的内容时,可以重写父类中的
方法,这样,既沿袭了父类的功能,又定义了子类特有的内容。
重写的注意点:
1.子类方法的名称、返回类型、参数类型和顺序均与父类的一致。
2.子类方法的访问权限必须大于private,不包括private,因为父类的private成员子类不可见,更不用谈及重写。
3.方法的重写只存在于子类和父类之间,同一个类中只能重载,即同样的方法名不同的参数。
4.父类的静态方法不能被子类覆盖为非静态方法。
5.被Final关键字修饰的方法不能被重写。
方法的重载
在Java中同一个类的多个方法可以有相同的名字,但是拥有不同的参数列表,这就是方法的重载。参数列表又叫参数签名,包括参数的类型、个数、顺序,只要有一个不同那就称为参数列表不同。重载是面向对象的一个基本特性。
重载的注意点:
1.参数列表必须不同,参数列表不同包括:类型不同、个数不同、顺序不同,仅仅参数变量名称不同不算重载。
2.方法名称必须相同,方法的返回类型可以不同也可以相同,仅仅返回类型不同不可以称为方法的重载。
3.构造方法也可以重载。
4.静态方法也可以重载。
5.方法的修饰符可以不相同。