java面向对象及三大特性:封装、继承、多态

一、面向对象

1、面向过程和面向对象       

    (1)面向过程:(代表:C)

             注重步骤,因果关系----不需对象的提取和模型的建立

    (2)面向对象:(代表:java)

            注重对象,利用关系连接对象---将整个实现成抽象成一个个对象,特征作为属性,行为作为方法             

    【注】  C++:既支持面向过程,又支持面向对象,

                一般说java和c++区别时,应提到面向对象和面向过程

2、对象---一个抽象概念,表示一类事物,具有共同的特征和行为

    (1)一个类实例化出来的个体---对象

    (2)创建对象的方式

  •  new------在堆空间中分配内存
  • 反射机制---Class对象调用newInstance()
  • 动态代理----通过字节重组生产一个替代原始对象的代理对象 proxy.newProxyInstance                              (JDK)
  • clone---克隆方式(原型模型),对象调用clone(),copy一个相同的对象
  • 反序列化----序列化 --对象从内存到硬盘,整个对象分块按顺序传输到硬盘

                      反序列化--对象从硬盘到内存,将对象块一点点传到硬盘组成一个整对象

    【注】特殊的String对象   

      String对象的两种创建方式:

        第一种方式: String str1 = "aaa";     是在常量池中获取对象("aaa" 属于字符串字面量,因此编译时期会在常量池中创建一个字符串对象)

        第二种方式: String str2 = new String("aaa") ;    一共会创建两个字符串对象一个在堆中,一个在常量池中

3、面向对象三大特征:

     封装、继承、多态

二、封装-----私有化+set get

1、封装步骤

(1)私有化:属性用private修饰---只允许本类使用

 (2)set get封装属性:为外界提供访问入口

2、封装作用

代码打包成一个整体,  不允许外部对象直接访问对象的内部信息

(1)保证内部结构的安全

(2)屏蔽复杂,暴露简单

三、继承----extend

1、继承关系    -----is a关系

   子类 extends  父类{

       }

2、继承作用

  (1)基本作用:代码复用,父类中有的属性,子类中可以不用重新声明

  (2)因为有了继承关系才有后期的方法覆盖和多态

3、继承特点

  •    一个子类只能继承一个父类,只允许单继承,不允许多继承(C++可以),可间接继承

         多个子类可以继承一个父类

  • 子类继承父类除构造方法外剩下都可以继承---即父类的属性和方法相当于被复制到子类

     父类中private修饰的私有属性可以继承但不能在子类中直接访问,可通过get方式间接访问

  • 耦合度高,修改父类影响子类

四、多态----父类引用指向子类对象

1、多态的前提----有继承关系

      多态---多种形态,编译时一种形态,运行时一种形态

      animal a=new Cat();

      编译看左边----animal类型引用----Animal.class

                        ---判断调用的方法是否属于该类  ,属于子类特有方法--编译不通过;

                                                                       属于父类方法(子父类共有)---编译通过,动态绑定                                   

        运行看右边--new子类对象,子类对象动态执行父类引用调用的方法---动态绑定

                            当

 2、对象类型转换 

    (1)两种转型必须有继承关系才可以转型

    (2)基本数据类型---自动类型转换和强制类型转换(需要加强制类型转换符)

             引用数据类型---向上转型和向下转型

    (3)引用:值保存的是内存地址的对象,特称为引用

                  个人觉得 其实还是对象,只是它的值是地址而一般对象的值是数据

3、向上转型----自动转换,调用和子类共有方法

     子对象 转换成 父对象(父类型的引用指向子类型的对象,自动转换)

    

     父类的引用只能调用和子类对象共有的方法

4、向下转型---强制转换,可调用子类特有方法

    父对象  转换成  子对象(需要在父对象前加一个子类,强制转换)

     

     

     为了父类型的引用也能调用子类对象特有的方法

[注]强转前要用instanceof判断是否可转

5、多态的两种实现方式

(1)重写(覆盖)-----方法名同,参数列表同

(2)重载-----方法名同,参数列表不同

  [注]重写和重载具体可以看 方法内容介绍中。

java基本知识--关键字:static、final、abstract、interface、this和super;常量、接口、抽象类;方法重载和重写、内部类、类对象之间关系等_@snow'的博客-CSDN博客

6、多态实现步骤:

(1)将具体的不同对象抽象成一个大类作为父类 【animal】

(2)具体构建不同的具体类,并用extends继承父类,【dog,cat 】

         可根据需要进行方法覆盖,重写父类里的方法【eat()】

         但不可增加新的方法,因为父类里没有的方法,通过父类对象传参时,编译不通过

  (3)功能类传参抽象类对象,通过抽象类的对象连接具体类的对象,

  (4)测试时,需要什么对象,直接new具体对象即可,子类转为父类是自动转换的【dog--》animal】

 调用被子类重写的方法,一般会根据后面new的什么类型子类对象,具体调用子类中重写后的具体方法实现

       

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值