9号和10号的学习内容

(继承中变量的使用和方法的重写)
1.继承中变量的使用
1).父类成员变量与子类成员变量同名时,使用super.变量名指定父类的成员变量

2.继承中构造方法的使用
1).创建子类对象时,会先调用父类的无参构造,因为子类的构造函数中默认存在一个super();
2).如果父类没有无参构造的话,我们就需要手动指定子类去调用父类的含参构造super(参数);
3).构造方法不可以被继承,原因是:构造方法名必须是本类的类名,不可能在子类中存在一个父类名字的构造方法

3.方法的重写
重写:子类对父类的方法不满意时,可以重写父类的方法
注意:重写是在不改变父类方法的前提下,实现功能的修改,重写后子类对象调用的就是重写后的功能
原则:两同 两小 一大
两同:方法名+参数列表相同
一大:子类方法的修饰符权限 >= 父类方法的修饰符权限
两小:子类方法的返回值类型,有两种选择:
1)子类方法的返回值类型与父类方法的返回值类型相同
2)子类方法的返回值类型是父类方法的返回值类型的子类
比如:父:void 子:void
父:int 子:int 但是:byte short long都不行!没有继承关系
父:Animal 子:Animal/Cat都可以,但不可以是Car
注意:我们还可以给方法上加@Override注解,标记这是一个重写的方法

(静态)
静态:
1.static可以修饰成员变量和方法
2.被static修饰的资源称为静态资源
3.静态资源随着类的加载而加载,最先加载,优先于对象进行加载
4.静态资源可以通过类名直接调用,也被称作类资源
5.静态被全局所有对象共享,值只有一份
6.静态资源只能调用静态资源
7.静态区域内不允许使用this与super关键字,因为this代表本类对象,super代表父类对象,有静态时还没有对象呢~

静态代码块static{}
1.格式:static{ }
2.位置:类里方法外
3.执行时机:随着类的加载而加载,优先于对象进行加载【只加载一次】
4.作用:用于加载那些需要第一时间就加载,并且只加载一次的资源,常用来初始化

final 关键字
1.修饰类:最终类,不可以被继承
2.修饰方法:这个方法的最终实现,不可以被重写
3.修饰常量:值不可以被更改,并且常量定义时必须赋值
注意:常量的定义需要使用全大写,单词之间使用下划线分隔

(多态)
面向对象之多态:
前提:继承+重写
2. 口诀1:父类引用指向子类对象
解释:父类类型的引用类型变量保存的是子类类型的对象的地址值

  1. 口诀2:编译看左边,运行看右边
    解释:编译时要看父类是否定义了这个资源,运行时使用的是子类的功能

  2. 资源使用情况
    1).成员变量使用的是父类的
    2).成员方法使用的是父类的方法定义,子类的方法体
    3).如果多态对象调用的是子类没有重写过的方法,方法定义与方法体使用的都是父类的,所以这个不符合多 态的前提,直接使用纯纯的父类对象调用即可
    4).静态资源属于类资源,随着类的加载而加载,只会加载一次,优先于对象进行加载,可以通过类名直接调 用,被全局所有对象共享,所以静态不存在重写的现象,在哪个类定义,就属于哪个类的资源
    5).我们现在学习的多态,把自己看作是父类类型,参考“花木兰替父从军”

(异常)

  1. 异常的继承结构
    异常层次结构中的根是Throwable
    Error:目前我们编码解决不了的问题
    Exception:异常
    编译异常:未运行代码就报错了,强制要求处理
    运行时异常:运行代码才报错,可以通过编译,不强制要求处理

2.异常的解决方案
1). 捕获处理try-catch–自己解决
(1)try-catch结构可以嵌套,如果有多种异常类型需要特殊处理的话
(2)使用多态的思想,不论是什么子异常,统一看作父类型Exception
做出更加通用的解决方案,甚至可以只写这一个

2).向上抛出throws–交给别人解决
异常抛出的格式:
在方法的小括号与大括号之间,写:throws 异常类型
如果有多个异常,使用逗号分隔即可
(1)如果一个方法抛出了异常,那么谁来调用这个方法,谁就需要处理这个异常,这里的处理也有两种方案:捕获解决 或者 继续向上抛出
(2)不能直接把异常抛给main(),因为调用main()是JVM,没人解决了,该报错还报错,所以我们一般会在main()调用之前将异常解决掉

异常捕获处理的格式:
* try{
* 可能会抛出异常的代码
* }catch(预先设想的异常类型 异常名){
* 万一捕获到了异常,进行处理的解决方案
* }
* try-catch结构可以嵌套,如果多种异常类型需要特殊处理的话

(抽象)
1.被abstract修饰的方法是抽象方法,抽象方法没有方法体
2.一旦一个类中包含抽象方法,这个类必须被声明成抽象类
3.如果子类继承了抽象父类,有两中解决方案
1)方案1:抽象子类,躺平,实现一部分/不实现抽象父类中的抽象方法
2)方案2:普通子类,还债,实现抽象父类中所有的抽象方法
4抽象类不可以被实例化
5.抽象类有构造函数的,但是不是为了自己使用,为了子类super()调用
6.抽象类可以定义成员变量/成员常量
7.抽象类中可以定义全普/全抽/半普半抽
8.如果一个类不想被外界实例化,可以把这个类声明成抽象类
9.abstract关键字不可以与private static final共用

被abstract修饰的类是抽象类
如果一个类中包含抽象方法,那么这个类必须被声明成一个抽象类
被abstract修饰的方法是抽象方法,抽象方法没有方法体
当一个子类继承了抽象父类以后,有两种解决方案

  • 抽象类是否有构造方法?有
    既然抽象类不能实例化,为什么要有构造方法呢?
    不是为了自己使用,而是为了子类创建对象时使用super();

  • 抽象类是否有构造方法?有
    既然抽象类不能实例化,为什么要有构造方法呢?
    不是为了自己使用,而是为了子类创建对象时使用super();

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值