目录
☆面向对象的世界观
✿世界是由各种各样的具有自己独特的运动规律和内部属性的对象组成,不同对象之间互相作用和通讯就形成了缤纷的世界
❀好处:更符合人对事物认识的规律
❀对象:比如狗,粗略的认识狗的特征
❀对象间的交互:交流
☆类和对象
✿概念: 类用来封装数据,及处理这些数据的方法
类是抽象,而对象是具体
可以理解为显示中的模具(清朝钱币模具)
❀建模: 对象 --(抽象)---> 类
❀实例化: 类 ---(创建)---> 对象
❀类变量和实例变量
- 类变量: static修饰的变量成员变量(特点:可以通过类型访问)
- 实例变量: 没有static修饰的成员变量(特点:必须通过实例对象访问)
❀类中的static块:在类加载完成,进行初始化时执行,且整个生命周期只被执行一次,一般的可用于资源初始化
❀修饰符
- public : 访问权修饰词
- abstract: 抽象类,不能实例化对象
- final:最终类,不能有子类
☆继承
✿允许创建分等级层次的类
继承就是子类继承父类的特征和行为
❀示意图:
❀关键字:extends
❀java不允许多重继承
❀继承的作用
- 多态
- 代码复用
☆方法的重载和重写
✿方法: 类的行为(或者叫功能)
- 方法可以类比为是遥控器上的按钮
- 方法不能嵌套定义
- 不能在方法体外直接写逻辑代码(static块除外)
❀修饰符及作用域:(接口中定义的方法默认就是public的)
❀重载(Overload):一个类里面,方法名字相同,而参数不同,最常用的地方就是构造器的重载
1. 好处:传入不同的方法参数,具有不同的行为。(静态多态或叫编译时多态)
2.规则:
- 必须改变参数列表(参数个数或类型不一样)
- 可以改变返回类型
- 可以改变访问修饰符
- 可以声明新的或更广的检查异常
- 方法能够在同一个类中或者在一个子类中被重载
- 无法以返回值类型作为重载函数的区分标准
❀重写(Override):是子类对父类的允许访问的方法的实现过程进行重新编写,但返回值和形参都不能改变
1. 好处:好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。(运行时多态)
2.规则:
- 参数列表必须完全与被重写方法的相同
- 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(说明:java5 及更早版本返回类型要一样,java7 及更高版本可以不同)
- 访问权限不能比父类中被重写的方法的访问权限更低,例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected
- 父类的成员方法只能被它的子类重写
- 声明为 final 的方法不能被重写(最终方法,不能被重写)
- 声明为 static 的方法不能被重写,但是能够被再次声明
- 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法
- 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法
- 构造方法不能被重写
- 重写的方法能够抛出任何【非强制异常】,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的【强制性异常】,或者比被重写方法声明的更广泛的【强制性异常】,反之则可以
☆抽象类
✿可以定义抽象方法
✿不能实例化对象
✿一般用于继承
✿修饰符:abstract
✿对类型进行建模
☆接口
✿所有方法均为抽象方法(jdk8之后不太合适)
✿不可实例化
✿jdk8:接口支持申明带实现的方法,关键字(default )
✿类只能单一继承,但可以实现多个接口
✿可以将接口理解为职责或契约
✿对行为的建模
☆多态
✿概念:类的对象对同一消息作出不同的响应,这些不同类要么是继承了相同的父类,要么是实现了相同的接口
❀示意图:
❀ 作用:解耦,各种设计模式的基础
❀条件:
1.有继承或实现关系
2.子类重写父类的方法
例外情况:
- static方法,因为被static修饰的方法是属于类的,而不是属于实例的
- final修饰的方法,不能被子类不重写
- private修饰的方法,对子类不可见,更不能被重写
- protected修饰的方法,虽然子类可见也能重写,但不能再外部引用
3.实现同一接口
4.使用父类或接口类型来引用子类或接口的实现类
❀分类:
- 编译时多态(方法的重载)
- 运行时多态(方法的重写)
❀实现
☆异常
✿分类
1.强制异常(或叫受检异常):Exception
2.非强制异常(或叫非受检异常):RuntimeException
3.父类PigFather,子类Peppa(佩奇),George(乔治)
3.1自动向上转型
- PigFather f = new Peppa()
- PigFather f = new George()
3.2强制向下转型
- Peppa p = (Peppa)new Father()
- George g = (George)new Father()
❀try-catch-finally
❀throw、throws
- 用于抛出 异常实例
- 用于在方法定义中声明该方法可能抛出的异常,如果异常为强制异常则方法调用者必须trycatch捕获或者继续抛出
❀常见异常
❀ 自定义异常:最重要的是异常的命名