面向对象的三大特性(封装,继承,多态)
1、封装
a、封装就是将数据和行为组合在一个包中,隐藏类的内部实现,对外公开接口,修改属性的访问权限,提供公共的get set方法,不能让类中的方法直接访问其他类的实例字段,程序只能通过对象的方法与对象数据进行交互。
b、封装的目的
1)隐藏类的内部细节
2)可以对属性的值进行控制,避免非法赋值
3)增加安全性,调用者不必关注实现细节
例:
2、继承
1、java类是单继承,java所有的类都直接或间接的继承自Object类,每个类都只能有一个直接父类,但是其父类还可以继承另一个类,也就是子类间接继承多个类
2、java通过extends关键字实现继承,实现继承的类称为自类,被继承的类称为父类或超类、基类,子类可以访问父类的public,protected属性,方法,但是自类不能获取父类的构造函数,自类可以重写父类的方法,但是返回值类型、方法名、参数列表要一致
3、如果在自类中要访问父类中同名的变量或方法,可以用super,this关键字
4、调用父类的构造函数super(参数列表),super()只能在自类的构造函数中出现,并在第一行
3、多态
1、里氏替换原则: 任何基类可以出现的地方,子类一定可以出现(子类对象可以替换父类对象)
2、即父类类型的变量可以引用子类对象
3、extends关键字不翻译为继承,实质的正确翻译是扩展
a、子类可以扩展出父类没有的方法
b、子举可以覆盖重写父类现有的方法
4 子类对象可以替换父类对象的原因是子类的范围和能力要大于或等于父类
a、子类继示了父类,拥有了父类的属性和方法,所以子类至少等宇父类,父类有的子类也有
b,子类可以扩展和重写父类的方法,所以父类没有的,子类也可以有。
6、子类可以扩展和重写父类的方法,所以父类没有的,子类也可以有
5、 子举方法中注意区分重写和重载
6、对象在调角方法时,需要受到对象本身的类型限制,父类的引用不能调用子类的方法
二、使用父类类型作为参数
1、多态:同一类对象的相同行为有着不同的表现形式(世界是多彩缤纷的)
2、多态能够提高代码的可扩展性和可维护性,减少代码量
3、实现多态的手法:
a、子类继承父类
b、子类重写父类方法
c、 父类类型可以引用不同的子类对象实现动态替换
4、设计原则:依赖于抽象,不依赖于具体
a、抽象的东西更加可靠,适应范围更广
b、像生活中的语言艺术(即没有把话说死)
c、00P中的多态也一样,没有把类型写死,可以用其它子类型来替换,程序就更灵活了
三、向上转型和向下转型
1、基本数据类型有转换,引用类型的数据也有类型转换
2、向上转型 T
a,将二个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换
b、 无需强制类型转换,直接接收即可
c、转换过程是安全的。不会出现类型转换错译的异常
d、 有可能损失部分子类新增的方法,因为受类型限制
e. 此时通过父类引用变量调的方法是字类覆盖或继承的方法,不是父类的方法
2、向下转型
a,父类型还原为子类型,只是把类型还原,并不是本质上修改类型
b、 目的是转换为子类型后,可以调用子类型特有的方法
c、需要强制类型转换
d、不安全,可能会出现类型转换异常ClassCastException
e、通常建议转换前使用instanceof判断一下
3、instanceof运算符
a、用来判断一个对象是否属于一个类或者实现了一个接口
b、结果返回true或者false