前言:为了大家更好的学习,我尽量采用图文和代码的形式为大家详细而又简单的讲解,与你相遇倍感荣幸,因为成长历程需要你我一起见证,欢迎大家一起讨论
曾经很多人问我Java面向对象三大特性是什么,如果你这都不知道说明你Java白学了,这是Java最基础最重要的知识;下面让我为大家介绍这三大特性吧:
Java三大特性:
封装 继承 多态:
他们之间有一定的联系,这需要你慢慢去理解,然后一一融汇贯通:
(一)封装:
- 将类的某些信息隐藏在类的内部,不允许外部程序直接访问;
- 通过该类提供的方法来实现对隐藏信息的操作和访问;
- 隐藏对象的信息
- 设置访问的接口;此接口非彼接口;而是提供给外界的一种访问方式;
封装的特点:
- 只能使用规定的方法访问数据;
- 隐藏类的实例细节,方便修改和实现;
代码的实现:
eclipse 可以自动生成set、get方法:右键:source->generate getters and setters;选择你需要的属性,进行设置;
以上就是封装的讲解了;
(二)继承:
什么是继承呢?
- 继承就是把若干个类共同的属性提取出来,放到一个类中作为父类,通过extents关键字实现子类继承父类里面的属性和方法;这就是继承;
继承的优点:
- 最大的好处就是提升了代码的复用性;
- 多态前提之一;
继承注意事项:
- Java只支持单继承;但它可以存在无限个间接的父类;例如爸爸的爸爸;
- 子类继承父类的属性和方法,如果方法重写了,有属性同名,优先调用子类的属性和方法;
- 子类无法继承父类的构造器;但是你可以通过关键字来调用父类构造器;
- 父类中禁止使用private 修饰;没有意义;除非你设置set、get方法;相比较麻烦.
重写父类方法:
- 子类继承了父类;也就是说子类具有父类的基因;也就父类拥有的所有东西;
- 大部分子类都是以父类为基础,添加方法;
- 当父类的方法无法满足子类的需求时;那么我们只能重写父类的方法;也就是所谓的方法的重写,方法覆盖;
注意事项:
我们应该遵从两同,两小,一大原则:
- 两同:方法名字相同,形参列表相同;
- 两小:子类方法返回值类型应该与父类方法的返回值类型小或者相等;子类方法是声明抛出异常应该比父类抛出的类型更小或者相等;
- 一大:子类的访问权限应该比父类的访问的权限更大;
- 覆盖方法和被覆盖方法要么都是类方法, 要么都是实例方法.
- 当子类覆盖了父类的方法了,子类无法访问父类被覆盖的方法;但是子类里面的方法还是可以调用父类的方法;
- 如果子类访问父的被覆盖的方法,则可以使用Super(被覆盖的实例方法),或者类名.方法作为调用,
- 如果子类定义了一个private 属性或者方法,那么其对子类是隐藏的,子类是无法访问的;即使子类定义一个一摸一样的方法;依然不是重写
题外话:
方法的重载和方法的重写并不是一个东西;虽然都发生在方法之间,并且要求方法名字相同,但两者之间并没有多大的关系;重载发生在同一个类,而重写发生在继承关系中;
子类构造器执行体中, 系统将会在执行子类构造器之前, 会隐式调用父类无参数的构造器.
深入继承:
在程序执行时候;系统不仅会为该类中定义的实例变量分配内存. 也会为它分配父类继承得到的所有实例变量分配内存. 即使子类定义了与父类中同名的实例变量. 因为子类中定义与父类中同名的实例变量并不会完全覆盖父类中定义的实例变量, 它只是简单的隐藏了父类中实例变量
(三)多态:
有人曾经问:老师,多态是我们之间最简单的;这么想就是大错特错的;往往这三大特性中最难理解的;甚至我当初也是理解了好久才理解的;即便是学了其他语言的同学,因为多态是Java所独有的;话不多说,来一起来看看多态吧;
形成多态的前提:
- 继承
- 重写(不了解的话看前面)
- 父类饮用指向子类
多态的优点:
- 消除类型之间的耦合关系
- 可替换性
- 可扩充性
- 接口性
- 灵活性
- 简化性
多态的通俗意义:
- 多态就是同一个行为具有多个不同表现形式和形态的能力;
- 多态就像是一个接口;使用不同的实例执行不同的操作;
单继承的代码实现
创建一个简单的例子来帮助大家来理解;
以上就是多态的展示方式:同一种行为具有多种表现方式…