java的封装,继承,多态

java中的面向对象的三大基本特征是:【封装】、【继承】、【多态】


 一、封装

        对象要有一个明确的边界;边界的划分(对象各司其职、对象的粒度、对象的可重用性)

        具体来说:

                1.属性: 私有 private(提供set和get方法)

                2.方法: 公开或私有public/private

                3.方法声明 --> 公开

                   方法实现 --> 隐藏

                   实现的改变对架构的影响最小。

 

二、继承

         共性放到父类,特性放到子类;父类 --> 子类,其实就是特殊 --> 一般

        1.关键字: extends  例如:Dog extends Animal{}

        2.java中一个类最多只能有一个直接的父类,即单继承(具有简单性、树形结构), C++中是单继承, java中要实现多继承,通过接口来实现。

        3.父类中所有属性和方法都能继承给子类;父类中的私有方法不能继承给子类。

        4.

                                    访问权限                              继承 
       private           本类内部                             不能继承        

             default           本类+同包                          同包子类可以继承           

             protected      本类+同包+不同子包        可以继承 

             public            公开                                     可以继承

 

        5.构造对象过程

                   (1)分配空间

                   (2)递归地构造父类对象

                                a.父类 初始化属性

                                b.父类 构造方法

                   (3)初始化属性

                   (4)调用构造方法

 

        6.super 

               用法:

                   super()  调用父类的构造方法,只能出现在构造方法的第一行

                   super.方法名   super表示父类的对象,通过它去调用父类的方法

               注意:在写类的时候,一定要写默认无参的构造方法,如果一个构造方法的

                           第一句既不是this(),也不是super()时,那么就会在这里隐含的调用

                           他的父类的无参的构造方法,即隐含的有super()。

 

三、多态

1.编译时多态:方法的重载

2.运行时多态:

 子类的对象放在父类的引用中,例如 Animal a=new Dog,子类对象当父类对象来使用。

  允许引用类型和对象类型不同,但要求引用类型是对象类型的父类。
  对象类型代表了对象自身客观的实际类型,引用类型代表了主观上把对象当作什么类型来看待。
  引用类型:编译时类型,主观类型
  对象类型:运行时类型,客观类型

        a.多态原则:

                  (1)对象类型不变

                  (2)只能用引用调用其引用类型中定义的方法

                  (3)运行时根据对象的实际类型去找子类覆盖之后的方法

             例子:

                  有Animal类中有eat()和sleep()两个方法,sleep()中睡8小时;子类Dog中有

                  eat()方法,sleep()方法中睡6小时,还有wangwang()方法。

                  现创建Animal a=new Dog(); 不能调用a.wangwang(),调用a.sleep()输出睡6小时。

       

          b.对象的强制转换:当我们把父类的引用赋值给子类引用的时候,需要强制类型转换。强制类型转换失败:类型转换异常.  为了避免类型转换异常,使用instanceof判断

                 格式: 引用 instanceof 类型

                        引用所指的对象是否与类相符,返回值boolean值。

                 用法:

                       Animala=new Cat();

                       if(ainstanceof Dog)

                       {

                          Dogd=(Dog)a;

                          d.wangwang();

                        }

                 说明:如果只有Dog d=(Dog)a;运行时错误,因为a是Cat而不是Dog (多态原则第一条)

 

          c.多态的灵活变换

                  (1)用于参数列表上:

                               publicvoid m(A a){} 可以用A类的任何子类对象作为参数

                  (2)用在返回值上:

                              publicA m(){}  这个方法可能返回A类的任何子类对象

 

欢迎交流 http://blog.csdn.net/ycwol/article/details/40076215

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值