zoukankan      html  css  js  c++  java
  • 7 面向对象的三大特征

    面向对象的三大特征为:封装、继承、多态。

    1 封装(encapsulation)

    1.1  广义上的封装就是包装,可以将方法看作是对为完成特定功能的代码的封装,可以把类看作对属性和方法的封装....

      狭义上的封装:将属性私有化,然后提供公有的gettersetter方法以供访问。

      封装的优点:

       1)隐藏了实现细节,简化开发

       2)安全

       3)提高了代码的可维护性和可扩展性。

      步骤:

       1)将属性私有化,将修饰符修改private

       2)提供公有的访问方法:getter方法:取值,setter方法:赋值

       3)添加访问权限控制

    1.2 四种修饰符

      public: 项目下所有的类都能使用

      protected: 本类,同包下的其他类或其他包下子类

      默认的(default/friendly): 本类中访问、同包下其他类访问

      private:只能在本类中访问

      属性,方法和构造方法的修饰符:public/protected/默认的/private

      类的修饰符:public/默认的

    2 继承(inheritance)

    2.1  继承代表了一种is-a关系,如果说AB,也就可以说A继承了B

      父类更加通用、子类更加具体

      优点:提高代码的复用性。

      java中实现继承使用extends关键字

       [修饰符] class 类名 extends 父类{

       

       }

      子类可以继承父类的非私有的属性和方法,不能继承父类的构造方法。子类无法继承父类的构造方法,但可以通过super关键字进行调用。

      java中继承是属于单继承,一个类只能有一个父类,但是一个父类可以有多个子类。C++中可以存在多继承,java可以通过接口实现多继承。

      一旦两个两个类建立了继承关系,子类就可以拥有父类非私有的属性和方法。

    2.2 方法的重写

      方法的重写(override):一般发生在父子之间,子类重写的方法应该满足以下条件:

       1)子类的方法名,返回值类型,参数列表必须与父类相同

       2)子类的修饰符范围>=父类的修饰符范围

       修饰符范围:public>protected>默认>private

       注意:一旦子类重写了父类中的方法,创建子类实例后,调用子类重写后的方法。

       * 重写(override)和重载(overload)区别:

      1)重写一般发生在父子之间,重载一般在同一个类中。

        2)重写要求方法名,返回值类型,参数列表必须与父类相同,并且修饰符范围大于等于父类方法的修饰符范围。

        重载方法名相同,参数列表不同,与返回值类型及修饰符无关。

        3)作用不同

        重载主要是为了提供一种同名方法不同参数的能力(可以让一个类用于多个同名的方法)

       重写主要是为了结合多态使用,提高程序扩展性和可维护性。

    2.3 super关键字

      super关键字:代表直接父类的引用,类别this关键字进行记忆。

       用法:

       1)可以使用super关键字访问父类的属性: super.属性名

       2)使用super关键字访问父类的方法:super.方法名()

       3)使用super关键字调用父类的构造方法,但是必须作为构造方法的第一行语句存在。

       注意:在静态方法中不能使用superthis关键字。

    2.4 Object

      java.lang.Object:所有类的基类

       一个类如果没有显式使用extends继承其他类,这个类继承了Object类,在任何类的对象中使用Object中的方法

       常用的方法:

       getClass() 返回此 Object 的运行时类。主要用于反射机制。

       toString() 返回该对象的字符串表示。如果使用System.out.println(stu);默认调用stu.toString()

         cn.zzsxt.oop6.Student@26ffd553==

         cn.zzsxt.oop6.Student(包名.类名)+@+16进制表示的hashcode

       toString()方法经常在子类中重写。

    2.5 父子类中代码的执行过程

       静态代码块在使用类时执行。 普通代码块在创建对象时执行。

      父类的静态代码块>子类静态代码块>父类的代码块>父类的构造方法>子类的代码块>子类的构造方法

       在创建子类时,先调用父类的构造方法先创建父类的实例,在创建子类的实例。

    2.6 equals==的区别

       ==在比较内容时分为以下两种情况:

       1)使用==比较基本数据类型,做的值的比较,值相同返回true,否则返回false

       2)使用==比较引用类型,比较不是内容是否相同,而是两个对象的引用(地址)是否相同,如果指向相同的地址返回true,否则返回false

       equals():比较内容是否相同。

        Object中的equals方法本质比较引用(==),如果需要按照内容进行比较是否相同,就需要重写Objectequals方法。

    3 多态(polymorphism

    3.1  生活中的多态:同一种物质,因环境不同而展现不同的形态。比如:水在不同环境下可以展现为固态,液态和气态。

      程序中的多态:同一种接口因不同的实现而执行不同的操作。

      优点:提高了代码的扩展性和可维护性。

      多态在java中实现的前提: 1.继承  2.方法的重写  3.父类引用指向子类

      多态在java中实现的步骤。

       1)建立继承关系

       2)在编译时将父类作为形参(范围大一点,模糊一点)

       3)在运行时将子类对象作为实参,执行的子类重写后的方法。

    3.2 类型转换

       1)子类转换为父类--->自动转化 (向上转型)

         a.子类向上转型成父类,上转型对象不能操作子类新增的成员变量和方法。

         b.上转型对象可以操作子类继承或重写的成员变量和方法

         c.如果子类重写了父类的某个方法,上转型对象调用该方法时,是调用的重写方法。

       2)父类转换为子类:强制转换(向下转型)

    3.3 instanceof运算符

      作用:判断对象是否为指定类型的实例。如果是指定类型的实例返回值为true,否则返回false

      防止在类型转换时出现ClassCastException异常。

        语法: 对象  instanceof 类型

        if(a instanceof Cat){

          Cat c=(Cat)a;

        }

  • 相关阅读:
    git 备查
    PyQt5 信号与槽机制
    Python 循环报错 'int' object is not iterable
    docker instructions命令及dockerfile实践
    shell脚本中set指令
    你知道什么是Python算法和数据结构、抽象数据和面向对象、数组和列表、链表吗?
    Python爬虫抓取B站人类高质量男性求偶视频的弹幕,康康都在讨论什么!❤️
    Python从入门到精通要掌握哪些基础知识?
    想搞个恶作剧吗? 代码丢给他,生死有命富贵在天,看我学会python用代码整蛊朋友
    妹妹画的小恐龙和我用Python画的小恐龙,你更加喜欢谁的!❤️
  • 原文地址:https://www.cnblogs.com/nicepanda/p/6973692.html
Copyright © 2011-2022 走看看