zoukankan      html  css  js  c++  java
  • 大数据之路day05_1--初识类、对象

    1.1 什么是面向对象
            面向对象思想就是不断的创建对象(属性与行为的封装,让二者作为整体参与程序执行),使用对象,指挥对象做事情。(在已有对象的情况下,直接使用对象,而不再去考虑对象的内部构造)

            面向对象的开发来讲也分为三个过程:OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)

    1.2 了解对象的内部结构


    1.2.1 成员变量和成员方法
            成员变量:访问修饰符修饰符(作用范围) 类型(存储结构) 属性名称(引用)=初始值(实际物理值);

           访问修饰符:可以使用四种不同的访问修饰符中的一种,包括public(公共的),protected(受保护的),无修饰符和 private(私有的)。public 访问修饰符表示属性可以从任何其它代码调用。private 表示属性只可以由该类中的其它方法来调用。       

            修饰符:是对属性特性的描述,例如:static、final 等等。

            类型:属性的数据类型,可以是任意的类型。

            属性名称:任何合法标识符

            初始值:赋值给属性的初始值。如果不设置,那么会自动进行初始化,基本类型使用缺省值,对象类型自动初始化为 null。

            成员变量有两种:一种是被static关键字修饰的变量,叫类变量或者静态变量(在类加载时初始化);另一种没有static修饰,为实例变量(在对象创建时初始化)。

            二者在程序运行时的区别,实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了(直接在方法区读取数据)。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用

            成员方法:访问修饰符 修饰符 返回值类型 方法名称 (参数列表) throws 异常列表 {方法体}

            修饰符:是对方法特性的描述,例如:static、final、abstract、synchronized 等等。

            返回值类型:表示方法返回值的类型。如果方法不返回任何值,它必须声明为 void(空)。 Java 技术对返回值是很严格的,例如,如果声明某方法返回一个int值,那么方法必   须从所有可能的返回路径中返回一个int值(只能在等待返回该 int 值的上下文中被调用。)

            方法名称:可以是任何合法标识符,并带有用已经使用的名称为基础的某些限制 条件。

            参数列表:允许将参数值传递到方法中。列举的元素由逗号分开,而每一个元素包含一个类型和一个标识符。

    throws 异常列表:子句导致一个运行时错误(异常)被报告到调用的方法中,以便以合适的方式处理它。异常在后面的课程中介绍。

        花括号内是方法体,即方法的具体语句序列。

        和变量一样分为实例方法和静态方法

    1.2.2 构造方法
            目的:主要用来给对象的数据进行初始化

            格式:访问修饰符类名() { }

    1.2.3 代码块
            1、局部代码块

                在局部代码块(方法体)中定义的变量属于局部变量,随方法的调用创建,随方法的出栈而消失

            2、构造代码块

                优先于构造方法执行(等同于将其放置在构造方法体中的首行),随构造方法执行而执行

            3、静态代码块

                只随类的加载而加载,无论创建多少次对象,只执行一次。

            创建对象时代码执行顺序:

            静态代码块(父类到子类)--构造代码块(父类)--构造方法(父类)--构造代码块(子类)--构造方法(子类)--方法(自然顺序)

    1.2.4 访问修饰符
    public                   package(default)                 protected              private

    本类              √                  √                                √                       √

    子类              √                  √                                √

    同包              √                  √

    全局              √

    1.2.5 this和supper
            this:本类对象的引用,本类对象的构造器

            supper:父类对象的引用,父类对象的构造器

    1.2.6 重写(覆盖)和重载
            重写:等同于对重写对象方法(非静态方法)的引用,修饰符,返回类型,方法名和参数一样

            重载:等同定义新的方法,只不过方法名和原来一样,但参数必须不一样(参数位置无关)

    1.3 面对对象的特性


    1.3.1 封装
            隐藏不需要对外公开的属性和方法,以减少对外耦合(通常将成员变量private,提供对应的getXxx()/setXxx()方法)

            而外部只能通过方法来控制成员变量的操作,可提高了代码的安全性;同时把代码用方法进行封装,提高了代码的复用性

    1.3.2 继承
            多个类有共同的成员变量和成员方法,抽取到另外一个类中(父类),在让多个类去继承这个父类

    特点:

        1.子类继承父类的成员变量

          当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。具体的原则如下:

            1)能够访问父类的public和protected成员变量;不能够访问父类的private成员变量(可以通过反射强制获取);

            2)对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

            3)对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。

        2.子类继承父类的方法

            1)能够访问父类的public和protected成员方法;不能够访问父类的private成员方法(但是能继承);

            2)对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

            3)对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法(但是父类的成员方法如果是静态,子类也必须是静态才能屏蔽,不然编译错误,反之亦然)。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。

            注意:隐藏和覆盖是不同的。隐藏是针对成员变量和静态方法的,而覆盖是针对普通方法的。

        3.构造器

            子类是不能够继承父类的构造器,但是要注意的是,如果父类是有参构造,那么子类必须有同类型参数构造,如果父类是无参构造,那么子类任意构造都可。

    1.3.3 多态
            父类的引用指向子类对象:父类类型  引用名称= new 子类类型

            父类类型  引用名称= (父类类型 引用名称)new 子类类型

        A:多态成员变量

            当子父类中出现同名的成员变量时,多态调用该变量时:

            编译时期:参考的是引用型变量所属的类中是否有被调用的成员变量。没有,编译失败。

            运行时期:也是调用引用型变量所属的类中的成员变量。

            简单记:编译和运行都参考等号的左边。

        B:多态成员方法

            编译时期:参考引用变量所属的类,如果没有类中没有调用的方法,编译失败。

            运行时期:参考引用变量所指的对象所属的类,并运行对象所属类中的成员方法。

            简而言之:编译看左边(父类是否拥有该方法),运行看右边(静态都看左边)   

  • 相关阅读:
    一行代码搞定Dubbo接口调用
    测试周期内测试进度报告规范
    jq 一个强悍的json格式化查看工具
    浅析Docker容器的应用场景
    HDU 4432 Sum of divisors (水题,进制转换)
    HDU 4431 Mahjong (DFS,暴力枚举,剪枝)
    CodeForces 589B Layer Cake (暴力)
    CodeForces 589J Cleaner Robot (DFS,或BFS)
    CodeForces 589I Lottery (暴力,水题)
    CodeForces 589D Boulevard (数学,相遇)
  • 原文地址:https://www.cnblogs.com/wyh-study/p/11822865.html
Copyright © 2011-2022 走看看