在现实生活中的任何物体都可以归为一类事物,而每一个个体都是一类事物的实例
个人理解- 就是为了方便我们写代码而衍生出来的一个理念,他通过 封装 继承 多态 三个特性简化了我们的操作
面向对象有三大特性,封装、继承和多态。
封装
封装就是将一类事物的属性和方法抽象成一个类,使其属性私有化,方法公开化,对外其他类可以通过get和set对对象属性值进行操作,提高了数据的隐秘性和安全性,使代码模块化。提高代码复用率。
继承
继承是发生在两个类之间,一个类继承另一个类这个类就是子类,子类有父类的行为和属性,也有自己特有的行为和属性。这样做进一步提高了代码的复用性。
关于继承的几点总结:
1)父类有的,子类都有
2)父类有的,子类可以改变
3)父类没有的,子类可以增加
4)构造方法不能被继承,只能通过super关键字调用
5)方法和属性可以被继承
6)子类的构造方法隐式地调用父类的不带参数的构造方法
7)当父类没有不带参数的构造方法时,子类需要使用super来显式地调用父类的构造方法,super指的是对父类的引用
8)super关键字必须是子类构造方法的第一行语句
多态性
多态性:具有另一个类的所有属性和方法,同时它还可以有另一个类不具备的属性和方法,
1他提高了代码的复用率(因为有继承)2.提高了程序的扩展性 灵活性
1) 声明父类new子类,将父类的对象指向子类对象,只能调用父类已经声明的方法,不能调用子类特有方法
2) 继承是前提
3) 一般会存在方法的覆写
4) 编译期看左边 运行时看右边, 编译期是父类对象 运行时是子类对象
5)那么 编译期只能调用父类已经声明的方法 不能调用子类特有的方法
多态性的实际使用
-
对象声明父类(抽象类)/父接口 实际new子类/实现类对象
-
方法参数声明父类(包含抽象类)或者父接口 实际要传入的是子类/实现类对象
-
方法的返回值声明父类(包含抽象类)或者父接口 实际返回的是子类/实现类对象
动态绑定,静态绑定
运行时异常 非运行时异常
.静态绑定(编译期绑定) 和动态绑定(运行时绑定)
* 多态性中: 方法会调用子类覆写的方法 编译期看左边 运行时看右边
* 属性会调用父类的属性 编译期看左边 运行时看左边
*
-
静态绑定(编译期绑定)---调用父类
-
1 属性...
-
2 private..... 3 final..... 4 static......修饰的方法
-
动态绑定(运行时绑定) ---调用子类
-
所有方法 都是调用子类覆写过的方法
多态性:类型转换(引用数据类型的)
*
-
子类型(小类型)--->父类型(大类型) 自动类型转换 向上转型
-
父类型(大类型)---->子类型(小类型 ) 强制类型转换 向下转型(前提是:可以转换 本身是这个类型的 否则 ClassCastException 类型转换异常)
- ClassCastException 当将一个不是该类型或者该类型的子类对象强制转换成该类型 则会抛出该异常