Java中的代码块、继承以及方法的重写

在Java中,使用{}括起来的称为代码块,根据其位置和声明的不同,可以分为局部代码块、构造代码块、静态代码块、同步代码块(多线程再涉及)

局部代码块
在方法中出现:限定变量的生命周期,及早释放,提高内存利用
只有这一种在一个类出现的时候执行顺序是自上而下的

构造代码块:
在类中方法外出现,多个构造方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行

静态代码块:
在方法外出现,加上static修饰,用于给类进行初始化,在加载的时候就执行,并且只执行一次

执行顺序:
局部代码块——静态代码块(有多少执行多少,只执行一次,自上而下)——构造代码块——构造方法 

 

 继承
概述:
多个类中存在相同的属性和行为时,将这些内容抽取到单独的一个类,那么多个类无需再定义这些属性和行为,只要继承这个类即可
通过extends关键字可以实现类与类的继承

     格式:class 子类名 extends 父类名 {}
单独的这个类称为父类,基类或者超类;这多个类可以称为子类或者派生类
有了继承之后,我们定义一个类的时候,可以在已经存在的类的基础上,还可以定义自己的新成员。

好处:提高了代码的复用性
提高了代码的维护性
让类与类之间产生关系,为后面的多态做准备
坏处: 类的耦合性增强了
开发的原则:低耦合、高内聚
耦合:类与类之间的关系
内聚:就是自己完成某件事情的能力

  • Java中继承的特点:
    • Java只支持单继承,不支持多继承
    • Java支持多层基础(继承体系)
  • 使用继承的注意事项:
    • 子类只能继承父类所有的非私有的成员(非私有的成员方法和非私有的成员变量)
    • 子类不能继承父类的构造方法,但是可以通过super关键字来访问父类的构造方法
    • 不要为了部分功能而去继承

 

继承与成员变量的关系:

类的组成:
成员变量
成员方法
构造方法
引入继承之后,我们开始考虑继承与这些的关系
1、当父类的成员变量与子类的成员变量不一样的时候
2、当父类的成员变量与子类的成员变量一样的时候
查找顺序:
1、在子类方法的局部范围找,找到返回
2、在子类方法的成员范围找,找到返回
3、在父类方法的成员范围找,找到返回
4、都找不到,报错
 

super关键字
当我们不仅想输出局部范围的num,还想输出父类中的num,我们应该怎么做呢
Java中提供了一个关键字:super

super和this的区别是什么呢?(面试题)
this代表当前对象的引用
super代表的是父类存储空间的标识(可以操作父类的成员)

怎么使用?

调用成员变量
this.成员变量 调用的是本类的成员变量
super.成员变量 调用的是父类的成员变量
访问构造方法(子父类的构造方法)
this(…) super(…)
访问成员方法
this.成员方法() super.成员方法() 

  • 继承与构造方法的关系
    • 子类中所有的构造方法默认都会访问父类中空参的构造方法
    • 为什么?
      因为子类会继承父类的数据,可能还会使用父类的数据
      所以在初始化子类之前,一定会先完成父类的初始化
      注意:
      每一个子类的构造方法的第一句话默认都是super() 

但是,当父类没有无参构造方法的时候,怎么办呢

使用super带参的形式去访问父类的带参构造方法
子类通过this去调用本类的其他构造方法
本类其他构造方法也必须首先访问父类的构造方法
使用this就是间接的调用super去访问父类的构造方法
注意事项:

super(…)或者this(…)必须出现在第一条语句上
否则,就会有父类数据的多次初始化,每个类只能初始化一次

  • 继承中成员方法的关系:
    • 子类的成员方法与父类的成员方法不一样
    • 子类的成员方法与父类的成员方法一样的时候,怎么办
      • 先找到子类,有没有这个方法,如果有,就调用
      • 如果子类中没有这个方法,就去父类中找,如果有,就调用
      • 如果都没有,就报错 

方法的重写
方法的重写:
子类中如果出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写

方法的重载:
本类中出现了方法名一样,参数列表不一样的方法,与返回值无关

子类的成员方法与父类的成员方法一样的时候,怎么办
1、先找子类中,有没有这个方法,如果有,就调用
2、如果子类中没有该方法,就去父类中查找,如果有,就调用
3、如果都没有,就报错
方法重写的注意事项:
1、父类的私有方法不能被重写
2、子类重写父类方法时,访问权限不能低
要么子类重写的方法比父类的权限高,要么一样
3、父类的静态方法,子类也必须通过静态方法进行重写(其实算不上重写)

感谢阅读,我是酷酷的涛,点个订阅和关注吧!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值