首页 > 其他分享 >面向对象

面向对象

时间:2023-03-23 19:46:45浏览次数:43  
标签:super 对象 子类 面向对象 new 父类 方法

面向对象

面向对象编程(Object-Oriented Programming,OOP)

面向对象编程的本质就是:以类的方式组织代码,以对象的组织封装数据

对于描述复杂的事物,为了从宏观上把握、从整体上合理分析、我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理

三大特性

  1. 封装
  2. 继承
  3. 多态
  • 从认识的角度,先有对象,再有类(例:先有人,再有教师,学生等)
  • 从代码的角度,先有类,再有对象(对象是new出来的,类是对象的模板)

值传递和引用传递

  • 值传递:指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数
  • 引用传递:指在调用函数时将实际参数复制一份传递到函数中,那么在函数中对参数所进行的修改,将会影响到实际参数

类与对象的关系

类是一种抽象的数据类型,它是对某一类失误整体描述/定义,但是并不能代表某一事物。

例:动物、植物、手机等

对象是抽象概念的具体实例

例:张三就是人类的一个实例,狗就是动物类的一个实例

类的组成

类由属性,方法,构造器,代码块,内部类这5部分组成

static关键字

  • 可以修饰:属性、方法、代码块、内部类
  • 被static修饰的部分随着类的加载而加载 ,所以该部分的加载早于对象的创建。举例
    1. 静态变量随着类的加载而加载,可以通过“类.静态变量”进行调用
    2. 由于类只会加载一次,所以静态变量也只会存在一份
    3. 在静态方法中,不能使用super或this关键字

abstract关键字

  • 可以修饰:方法,类
  • 修饰类:
    1. 此类不可实例化
    2. 一定会有构造器(以便子类实例化时调用)
    3. 一定会提供子类
  • 修饰方法:只声明了方法,没有方法体
  • 抽象类可能没有抽象方法,但是有抽象方法的类一定是抽象类
  • 只有子类重写了父类所有的抽象方法,才能实例化

interface关键字

  • 接口和类是并列的结构
  • 全局变量:默认为public static final ,且省略;抽象方法:默认public abstract,且省略
  • 不是类,所以没有构造器,意味着不能实例化
  • 如果实现类覆盖了接口的所有抽象方法,则此实现类可以实例化,否则,该类还是为抽象类
  • 可以实现多个接口,public class UserImpl implement AA,BB,CC,弥补了Java类不能多继承的缺点
  • 接口之间可以继承,且可以多继承

new关键字

使用new关键字时,除了分配内存空间,还会给创建好的对象进行默认的初始化以及对类中构造器的调用

super关键字

  1. super调用父类地构造方法,必须在构造方法的第一行
  2. super必须只能出现在子类的方法或者构造方法中
  3. super和this不能同时出现在构造方法中

和this的不同:

  • 对象不同
    1. this:本身调用者这个对象
    2. super:调用者的父类对象
  • 前提不同
    1. this:没有继承也可以使用
    2. super:只有继承才可以使用
  • 构造方法:
    1. this():本类的构造
    2. super():父类的构造

构造器

类自带一个无参的构造方法,构造器和类名相同,且没有返回值

idea快捷键:Alt + Shift + s(我的idea快捷键是延用eclipse的)

作用:

  1. 使用new关键字,必须要有构造器
    1. 一旦定义了有参构造,无参构造就必须显示定义
  2. 用来初始化值

权限修饰符

访问控制修饰符 同类 同包 不同包的子类 不同包的非子类
private
default(默认)
protected
public

重写和重载

重载:“两同以不同”,同一个类、相同方法名,但参数列表不同(参数类型不同或者个数不同)

重写:

  • 重写以后,当创建子类对象以后,通过子类对象调用父类中的同名同参数的方法时,实际上执行的是子类重写父类的方法
  • 规则
    1. 方法名和形参列表要一致
    2. 重写的权限修饰符不能小于父类的权限修饰符,特殊地,子类不能重写父类中修饰符为private的方法
    3. 返回值类型
      1. 父类为void,子类就为void
      2. 父类为基本数据类型,子类就为相同的基本数据类型
      3. 父类为A类型,子类就为A类型或A类型的子类
      4. 子类抛出的异常类型不大于父类抛出的异常类型

三大特性

封装

“高内聚,低耦合”:高内聚就是类的内部数据操作自己完成,不允许外部干涉,低耦合就是:仅暴露少量的方法给外部使用

作用

  1. 提高程序的安全性,保护数据
  2. 隐藏代码的实现细节
  3. 统一接口
  4. 系统可维护增加了

继承

​ 继承的本质是对某一批类的抽象,从而实现对现实世界更好地建模。

  • 关键字:extends,他的意思是拓展。子类是父类的拓展

  • Java中只有单继承,没有多继承,即一个类只有一个父类

  • 在Java中,所有类都直接或者间接地继承Object类

多态

  • 含义:父类的引用指向子类的对象

  • 作用:提高了代码的通用性,常称作接口重用

  • 举例:Person s1 = new Student();

  • 使用前提:类的继承关系和方法的重写

  • 注意:对象的多态性只适用于方法,不适用于属性

向上转型与向下转型

  • 向上转型:父类的引用指向子类的对象,向上转型时,子类对象当成父类对象,只能调用父类的功能,如果子类重写了父类中声明过的方法,方法体执行的就是子类重过后的功能。但是此时对象是把自己看做是父类类型的,所以其他资源使用的还是父类型的。

    Cat c = new Cat();
    Animal a1 = c;
    或者
        Animal a2 = new Cat();
    
  • 向下转型:使用强转符(),是为了方便使用子类的特殊方法,也就是说当子类方法做了功能拓展,就可以直接使用子类功能

    Person s1 = new Student();
    Student stu = (Student) s1;
    

标签:super,对象,子类,面向对象,new,父类,方法
From: https://www.cnblogs.com/MePear/p/17248640.html

相关文章

  • Python 面向对象
    Python面向对象目录Python面向对象1编程范式介绍1.1面向过程编程(ProceduralProgramming)1.2面向对象编程2面向对象编程(Object-OrientedProgramming)2.1Class......
  • 面向对象全部内容
    目录面向过程面向对象类的定义和对象的产生定制对象自己独有的属性属性的查找顺序绑定方法和非绑定方法隐藏属性property装饰器继承super和mro多态组合内置方法(魔术方法简......
  • 大爽Python入门教程 7-6 面向对象编程 实例演示 简易方格游戏(二维)
    大爽Python入门公开课教案点击查看教程总目录1介绍将上一节,一维的面板拓展成二维的。面板数据从txt中读取出来玩家从左上进入,输入一串移动命令,展示中间过程玩家......
  • Python——面向对象编程(十一)
    1.对象的封装#coding=utf-8#对象的封装#类的概念"""类的名字:当名字由多个单词构成时,我们采用驼峰命名法就是说多个单词,每个单词的首字母需要大写这也是python的......
  • 0316-0322面向对象编程
    0316-0322面向对象编程1.面向过程、对象概念#python中两大范式:1.面向过程2.面向对象'''两者都不是新的技术,而是做事的思维方式'''#面向过程的核心是过程:即按先后次......
  • 面向对象设计&&类与对象的关系
    1、面向对象程序设计程序设计的过程,就是设计类的过程万物皆对象,程序来源生活,只不过是抽象化--现实的类抽象化人类:java程序中的类人:Java中具体的对象姓名,年龄等等:java......
  • 面向对象的理解
    c++面向对象的理解1.介绍面向过程,就是步骤。面向对象,很符合我们现在的社会方式,你面试程序员,也是前端程序员,后端程序员的应聘,不是面向某个具体的程序说步骤。2.案例: ......
  • 面向对象基础
    A2:类与实例类是什么?一切事物皆对象,即所有的东西都是对象,对象是可以看到、摸到、感觉到、听到、闻到、尝到的东西。对象是一个自包含的实体,用一组可识别的特性和行为来识别......
  • Python基础:面向对象-继承和多态
    一、继承Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性的方法。作用:可以减少代码重复,提升代码复用率。简单示例如下:#父类AclassAni......
  • 【项目实战典型案例】21.面向对象复用、面向对象实现、立体化权限落地
    目录​​一:背景介绍​​​​1、针对于激励配置的功能体现出来的:面向对象的思想就可以实现极大程度的复用性的问题​​​​2、脱离学习通设计图,过程化,如何用面向对象的思想来......