• 大数据之路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:多态成员方法

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

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

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

  • 相关阅读:
    Asp.Net MVC4开发二: Entity Framework在Asp.Net MVC4中的应用
    敌兵布阵(杭电1166)(树状数组)
    alibaba dexposed初步解析
    shell学习三十二天----read读取一行
    cocos2d-x CCScrollView 源代码分析
    语言-编程语言:Python
    GitHub:Python
    GitHub-Microsoft:DotNet4
    GitHub-Microsoft:DotNet3
    GitHub-Microsoft:DotNet2
  • 原文地址:https://www.cnblogs.com/wyh-study/p/11822865.html
Copyright © 2020-2023  润新知