JAVA面向对象——继承

面向对象的三大特征:
继承:就是子类继承父类的属性(成员变量)和行为(成员方法)

为什么要有继承,继承的好处是什么?
继承的核心目的:
提高代码的复用性,相同代码重复利用!减少代码冗余。

继承的格式:

 [修饰符] class 类名 extends 父类类名{

	}


public class Teacher extends People{

 }

注意:Java是单继承的,一个类只能直接继承一个父类。
父类不可被子类继承的内容:
父类的构造器是不能被子类继承的。

继承后的特点——————成员变量:
成员变量不重名:访问没有影响
成员变量重名:优先访问子类的。
继承后的特点——————成员方法:
成员方法不同: 没有影响。
成员方法相同:优先调用子类的。

方法重写:
方法重写是发生在子父类之间的关系。
方法重写的原理:
子类继承父类,子类得到了父类的方法,
有可能子类认为父类的该方法无法满足自己的需求,
子类重写一个与父类一样的方法来覆盖父类的该方法。
重写(Override)注解:
子类在重写父类方法的时候,建议都加上重写校验注解:@Override
一旦方法加上了这个注解,那么这个方法就必须要是重写父类的方法。

	重写的要求:
    最好与父类的方法形式完全一样!!!声明不变,重新实现。
注意事项
    1. 子类方法覆盖父类方法,必须要保证权限大于等于父类权限。
    2. 子类方法覆盖父类方法,返回值类型、方法名和参数列表都要一模一样。

拓展:
子类是否可以重写父类私有的方法? 不可以
子类是否可以重写父类的静态方法? 不可以

继承后的特点:
子类构造器默认会在第一行先调用父类的无参数构造器一次。

        // super超类==父类的意思
        // 默认是去调用父类的无参数构造器,即使你不写这行代码,默认也存在。
        //super();
		继承后子类构造方法特点:子类所有构造器都会先调用父类的无参构造器一次。

子类的构造器为什么一定要先调用父类的构造器一次?
– 现实的角度来看: 必须先有爸爸,才有儿子。
先调用构造器其实就是在创建父类对象,再调用子类构造器是创建子类对象。

        -- 从底层来看:必须先创建父类对象,初始化父类的成员变量
        子类才能继承使用!
    		super()必须放在子类构造器的第一行!!

super和this

    super: 超类==父类 指的是父类对象空间。
    this : 指的是当前对象空间。

在开发的时候,比如我们重写了父类方法,
但是又可能需要调用父类被重写的该方法这时候怎么办呢?

    super.父类方法
    this.子类方法

    this.子类成员变量     ‐‐    本类的   
    super.父类成员变量     ‐‐    父类的

    this:找本类对象
    super:找父类对象

    this(..):找本类其他构造器
    super(..):找父类构造器

继承的特点:

    1. Java只支持单继承,不支持多继承。
       一个类只能继承一个直接父类,但是可以间接继承多个父类

    2.一个类可以有多个子类。

    3.Java支持多层继承(继承体系,间接继承)。

抽象类(abstract):(重要)

父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有
意义,而方法主体则没有存在的意义了。我们把没有方法主体的方法称为抽象方法。Java语法规定,包含抽象方法的类就是抽象类

父类自己写了一个方法,结果所有的子类都重写了这个方法,
父类这个方法的方法体就没有意义了。

抽象方法:

    父类认为子类必须有这个功能,但是父类又不能确定子类的这个方法具体要干嘛!!
    所以父类只提供这个方法的声明,而没有提供方法体,这个方法就是抽象方法。

拥有抽象方法的类就是抽象类。

需求:定义一个抽象类。

   抽象类的格式:
       [修饰符] abstract class 类名{

       }
   抽象方法:
       [修饰符] abstract 返回值类型 方法名称(形参列表);
       抽象方法是不能写方法体的。抽象方法只是一个方法签名。

关键:是需要加上abstract就变成了抽象类或者抽象方法。

抽象类的意义:是为了被子类继承,然后重写抽象方法。

抽象类是“有得有失”:
有得:抽象类拥有了抽象方法的能力。
有失:抽象类本身是不能创建对象的。
Human h = new Human();
h.run(); // 我方法体都没有,无法运行
说明抽象类不能创建对象。

抽象类的注意事项:

       1.一个类如果写了抽象方法,这个类必须定义成抽象类。
       2.如果一个类继承了抽象类,这个类必须重写全部的抽象方法。
       3.如果一个类继承了抽象类,但是没有重写全部抽象方法
         这个类也必须定义成抽象类
       4 .抽象类人家也是可以有普通方法的。

抽象类存在的意义:

       1.抽象类存在的意义就是为了被子类继承。
         如果抽象类不被继承,抽象类毫无意义。

       2.抽象类体现的是模板模式。
         抽象类是把不需要子类写的东西已经写好了
         抽象类自己搞不定的交给子类重写。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值