面向对象
OO技术只要有三个领域:OOA(面向对象分析),OOD(面向对象设计),OOP(面向对象编程)
面向对象就是将一组数据以及操作数据的方式封装在一个对象中,将数据封装为对象的属性,将操作数据的方式封装为对象的方法。程序员只需要调用对象就可以使用这些属性与方法,不需要知道哪些方法是如何实现的。
OOP的三个基本特性
封装
就是将对象的属性和方法尽可能的隐藏在类里面,只给用户留下使用的途径即可。而关于属性以及方法的实现,用户不需要知道。
举例:就好比是造一辆汽车一样,用车壳子给它封装起来,用户只需要对使用汽车即可,不需要知道汽车内部发动机什么的是如何工作的。
而根据封装,又有4种权限,类的属性和方法可以给谁看。
public:任何类都可以访问。
protected:同一个包,或者其子类可以访问。
默认不填:只有同一个包内的类可以访问。
private:只有同一个类的可以访问。
访问修饰符 | 同类 | 同包 | 子类 | 任何类 |
---|---|---|---|---|
private | 1 | |||
缺省 | 1 | 1 | ||
protected | 1 | 1 | 1 | |
public | 1 | 1 | 1 | 1 |
继承
将类按照现实世界类比为父子的话,子类就是继承于父类,通过extends关键字实现,一个子类只能继承一个父类。
子类可以继承父类public或protected修饰的属性或方法,也可以自己重写public或protected修饰的父类的方法。
子类除去继承自父类的属性和方法,也可以自己拓展方法。例如父类没有writeCode()的方法,而自己可以自己拓展。
举例:就好比父亲有一个工作技能=work()方法,这个工作技能是教书。
然后父亲生了一个儿子,儿子就会获得这个工作技能,教书。
重写
: 但是如果儿子不想教书,就可以重写work()方法,修改自己的技能,比如work()=编程。
当然,技多不压身,儿子也可以既继承了父亲的work(),自己又新学一个技能work02()=编程。这样儿子就既有work()=教书,又有work02()=编程。
注意:子类重写父类方法的权限只能比父类小。
多态
字面意思就是多种状态。现实世界一个事物往往具有不同的形态。例如动物,是动物就要吃东西才能活eat(),但是不同动物的eat方法具体又不一样,例如猫和狗都是动物,实现动物接口,但是猫吃鱼,狗吃骨头。
多态又分静态多态和动态多态。
- 静态多态:又称编译时多态,系统在升序编译时就知道调用那个方法。例如重载,系统在编译器时期,就根据传入参数的值需要调用哪个方法了。
- 动态多态:又称运行时多态。
动态多态的实现需要三个条件:继承,重写和父类引用指向子类对象。
多态调用的优先级this.eat(参数),super.eat(参数),this.eat(super.参数),super.eat(super.参数)。
即(子类有的用子类,子类没有的再调用父类)
优点
易维护,可重用,可拓展。