学习java第八天

Day08

昨日回顾
this. this.属性
this(参数) :构造方法第一行 不能递归调用
static静态 修饰
变量(除了局部变量): 静态变量 成员变量
方法 :静态方法
类名.
静态变量,非静态量区别
工具类编写 文档注释 不能嵌套
生成帮助文档:dos eclipse
在线文档 离线文档
继承 extends 单继承 不能多继承 多层继承(爷孙) 不能为了继承而继承
好处:提升代码复用性 多态的前提

今日内容
继承
代码块
final关键字
继承
访问修饰符
四种:
private 私有的
default 默认的(什么都不写)
protected 受保护的
public 公开的

继承中成员变量的关系
1、在子父类中定义了不同名称的成员变量,在子类中,既可以访问子类的成员变量,也可以访问父类的成员变量。
2、在子父类中定义了同名的成员变量,在子类中,根据就近原则来访问
在子类的方法中,如果访问了某个变量名称,优先在当前方法中,寻找该变量的定义,如果找到了就使用方法中的局部变量;如果没有找到,就到子类的成员位置寻找该变量的定义,如果找到了就使用子类的成员变量;如果没有找到,就到父类的成员位置寻找该变量的定义…一直往上找,一直到Object类中,如果还没有找到,就编译报错。
对象的创建过程
之前:
1.第一次使用一个类的时候,会进行类加载 将类中的信息加载进方法区
2. 创建对象
为对象的属性赋默认值
为对象的属性赋初始值
调用构造方法创建对象
现在:

  1. 类加载
    (1) 父类的类加载
    (2) 子类的类加载
    2.创建对象过程
    (1)创建父类对象
    为父类对象的属性进行赋默认值
    为父类对象的属性赋初始值
    调用父类的构造方法
    (2)创建子类对象
    为子类对象的属性赋默认值
    为子类对象的属性赋初始值
    调用子类的构造方法

Super关键字
概述:super: 超级的 super在java中代表当前对象的直接父类对象的引用
super的用法:super.
super代表当前对象的直接父类对象的引用,作用是区分子类和父类中存在重名的成员 变量时,用super.属性/方法名 代表直接父类的成员变量/成员方法。

Super(实际参数):
Super()/super(实际参数)
作用: 在子类的构造方法中调用直接父类的构造方法
super注意事项:

  1. super()/super(实际参数) 语句必须用在子类的构造方法中,必须是第一条语句。
  2. 如果子类的构造方法的第一条语句不是this()/ this(参数)/super(实际参数),默认在子 类的构造方法的第一条语句是super();

关键字this和super的详细解释
1、this和super:
this表示本类当前对象的引用
super表示本类当前对象父类的引用

this和super使用总结
1、含义:
this关键字表示本类当前对象的引用
哪个对象在调用this所在的方法,this就表示哪个对象
super关键字表示本类当前对象的父类的引用
哪个对象在调用super所在的方法,super就表示哪个对象中的父类部分的数据
2、super和this都可以访问成员变量
super只能访问父类中定义的成员变量
super.成员变量名
this既可以访问子类中定义的成员变量,也可以访问父类中定义的成员变量
this.成员变量名
3、super和this都可以访问成员方法
super只能访问父类中定义的成员方法
super.成员方法名()
this不仅可以访问子类中定义的成员方法,也可以访问父类中定义的成员方法
this.成员方法名()
4、super和this都可以访问构造方法:this语句和super语句
this():访问本类的其他构造方法
super():访问父类的构造方法

继承中构造方法的关系
1、在初始化子类数据之前,必须先完成对父类数据的初始化(因为在初始化子类数据的时候,可能会使用到父类中的数据,所以必须先把父类数据准备好)
2、如果在子类的构造方法中,没有显式的调用任何其他构造方法(本类、父类),在构造方法的第一句,系统默认给你加上super(),默认要访问父类的空参构造
3、如果在子类的构造方法中,手动增加了访问父类的构造方法,那么系统将不给你增加任何构造方法的访问
4、如果在子类的构造方法中,手动增加了访问本类的其他构造方法,那么系统将不给你增加任何构造方法的访问
5、构造方法不能递归调用
构造方法不能自己直接访问自己,也不能自己间接的访问自己
6、总结:
(1)【目标】子类的构造方法,一定要先访问父类的构造方法
(2)特点:
【this语句】和【super语句】必须在构造方法的第一行
super语句在第一句是为了保证父类的构造方法必须先执行
this语句在第一句是因为间接的访问了super,super必须先执行
在构造方法中,【this语句】和【super语句】不能共存
this语句和super语句都要在构造方法的第一行
【this语句】和【super语句】不能出现在其他非构造方法的非静态成员方法中
其他方法都是在对象创建之后,才能调用的方法,如果能调用this语句,就相 当于间接的使用对象,调用构造方法

继承中成员方法的关系
1、在子父类中,出现了不同名的方法
子类可以直接调用父类的方法,也可以调用子类的特有方法
2、在子父类中,出现了同名的方法
在子父类中,出现了一模一样的方法声明,而两个方法的实现内容却不一样
作用:在子类中,如果你不想修改父类中的方法声明,但是还想修改方法的实现内容, 这时候就需要使用重写。
3、方法的重写和方法的重载:
重载:在同一个类中,方法名相同,参数列表不同,与返回值类型无关
重写:在子父类中,方法名相同,参数列表相同,与返回值类型有关(相同)
别名:Override,覆写、覆盖
4、方法重写的检查:
@Override
让编译器帮助我们检查,当前的这个方法,究竟是否是对父类方法的重写。
5、说明:
方法本身还是属于父类,只是在子类中重新实现了这个方法的内容。

方法的重写(Override)

概念:
方法的重写(覆盖) : 子父类中,父类的方法不满足子类的需求,此时子类修改父类的方法,方法的重写。

要求:

  1. 方法名 形式参数列表 返回值类型必须相同
  2. 子类方法的的访问修饰符要和父类相同或者比父类的访问修饰符更宽(高大)
    回顾:方法重载的要求:
    方法名相同
    方法的参数列表必须不同(个数,类型,顺序)
    与返回值类型无关

子父类间方法的重载
返回值必须相同才是方法的重写
方法名不同不能叫做方法的重写
子类的访问修饰符要和父类的相同或者比父类更宽

特点:
当子类重写父类方法后,创建子类对象,调用重写之后的方法,执行的是子类重写之后 的方法实现。

方法重写检查:
@Override : 加到方法的定义上 可以检测方法是否是重写的方法

关于private修饰的方法是否可以被重写
结论: 私有的方法没有继承给子类,所以没有继承也就谈不上重写

方法重载(overload)和方法重写(override) 的区别
方法的重载:
1. 方法名相同
2. 形式参数列表不同(类型顺序 个数)
3. 和返回值类型 修饰符无关
4. 方法的重载可以发生在本类之间也可以发生在子父类之间
方法的重写:
1. 方法名 形式参数列表 返回值类型 必须相同
2. 子类方法的访问修饰符权限要和父类方法的修饰符相同或者比父类权限更大
3. 方法的重写只能发生在子父类之间

重写的注意事项
1、私有的方法不能被重写
父类中私有的方法,在子类中根本就看不到,继承不下来,就不能重写。子类可以自己定义一个和父类私有方法同名的方法,也不算重写,只能算是新定义了一个方法。
重写:使用父类的方法定义,修改为子类的实现。
2、方法在重写的时候,权限不能越来越小
子类应该是越来越强大,功能越来越多。
代码块
概述
1、代码块:使用大括号包起来的一段代码。放在不同的位置,有不同的名称,有不同的作用,有不同的执行时机。
{
代码块;
}
2、分类:
局部代码块
构造代码块
静态代码块
同步代码块(多线程)
局部代码块
1、格式:使用大括号包起来的一段代码
2、位置:方法中(和局部变量的位置一样)
3、作用:
限定变量的生命周期(限定局部变量的作用域的)
在局部代码块中【声明】的变量,只能在局部代码块的范围内使用,一旦出了局部代码块的大括号,变量就不能继续使用了。
某个变量一旦不能使用了,就会被回收,节省内存空间
4、注意事项:
如果是在局部代码块中声明了变量,会减少变量的声明周期,出了局部代码块就无法继续使用局部代码块中声明的变量。
如果是在局部代码块中修改了局部代码块外声明的变量,局部代码块结束之后,并不会消除局部代码块对这个变量的修改。

构造代码块
1、格式:使用大括号包起来的一段代码
2、位置:类中方法外(和成员变量的位置一样的)
3、作用:
用于给成员变量初始化赋值
4、执行时机:
在创建对象的时候,和成员变量按照顺序依次执行
5、构造代码块的执行说明:
(1)在创建对象的时候执行,由jvm默认调用
(2)在构造方法执行之前,执行
(3)任意一个构造方法执行之前,都会执行一次构造代码块的内容
(4)如果每个构造方法都会执行的内容,提取到构造代码块中,从而实现代码简化的 目的

静态代码块
1、格式:
static {
静态代码块的内容
}
被static修饰的构造代码块叫做静态代码块
2、位置:类中方法外(和静态变量的位置一样的)
3、作用:
用于给静态的成员变量初始化赋值
用于执行那些只需要执行一次的代码,例如驱动加载等
4、执行时机:
在类加载的时候和静态变量按照顺序进行依次执行
5、执行特点:
(1)随着类的加载而执行
(2)类只加载一次,所以静态代码块只执行一次
(3)执行的时机最早:早于所有的对象相关内容
6、扩展:
类是否加载了是不能完全依靠静态代码块执行的
有些类加载 是不会执行到静态代码块的

final关键字
1、单词含义:最终的,最后的,表示不能再改变的。
2、final关键字:可以修饰类、方法、变量
3、final修饰局部变量
特点:只有一次赋值机会,一旦赋值其值不可以改变。

4、final修饰成员变量
特点:

  1. final修饰的成员变量只有一次赋值机会,一旦赋值之后,其值不可以改变
  2. final修饰的成员变量没有默认值的
  3. final修饰的成员变量赋值方式有3种,(直接赋值 构造代码块赋值 构造方法赋值) 当 使用构造方法赋值的时候,必须保证每个构造方法都会对final修饰的成员变量赋值

5、final修饰静态变量 static
特点:

  1. final修饰的静态变量只能赋值一次,一旦赋值之后,其值不可以改变.
  2. final修饰的静态变量没有默认值
  3. final修饰的静态变量赋值方式有2种(直接赋值 静态代码块赋值)
    常量的分类:
    普通常量: 只被final修饰的变量
    静态常量: 被static 和 final同时修饰的变量
    公开静态常量: 被public static final同时修饰的变量叫做公开静态常量

6、final修饰方法
final修饰成员方法和静态方法
特点:
都可以被重载,但是不能被重写

7、final修饰类:最终类 俗称断子绝孙类
特点:
final修饰的类 没有子类的(不允许有子类的)
常见的final类 :
String Math System 都是final修饰的类

8、总结:
修饰类:
表示一个最终类,表示不能有子类,【不能被其他类继承】
一旦一个类型不能被继承,那么其中所有的方法都不能被重写
不影响当前类的方法被调用
修饰方法:
表示一个最终方法,【该方法不能被重写】
修饰变量:
表示一个最终变量,该【变量变成了常量】,就只能赋值一次
当前项目中,常用的常量一般都定义在一个类的成员位置,甚至专门定义一个常量类
定义常量的好处:见名知意,容易理解;可维护性高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值