面向对象的总体介绍(后期课程所学)

java面向对象基础 - 图1

概述

  1. 之前所学习的代码都是面向过程,针对问题解决问题,主要的思维方式是按照特定的步骤来执行代码
  2. 实际工作中所实现的代码,都是一些复杂的系统,这时候面向过程就不够用了,就需要用到面向对象
  3. 面向对象的思维方式:世间万物皆对象

    几种术语

  4. 对象(object):具体的一个物体,例如:张三这个学生、五点钟时间(名词)特指

  5. 属性(field):对象所具有的特征
  6. 类(class):对某一类物体的统一描述或者称呼,所描述的是“共性”,例如:学生、时间(张三和李四)统称

    对象在代码中的描述

    idea创建过程

    IDEA新建项目—>新建包package(src目录下:com)—>在包下面建包(根据功能的不同命名:com.object001)
    —>包中建类class(命名按实际对象命名)

  7. 创建一个具有共性的类(Student学生)

如图所示:张三就是对象=name:图片中 改为 String name;
image.png
image.png

  1. 再通过类class创建具有个性的对象(创建需要用new创建image.png,给对象的属性赋值用点属性image.pngs1.name .属性

image.png
image.png

  1. hero nana = new hero();//nana是对象名,hero是所调用的类名

类的基本组成

  1. 类名必须要和创建的文件名保持一致;后缀名.java
    1. 第一个字符必须是大写英文字母
    2. 使用驼峰命名法进行定义
      ```java public class Hero{

}

  1. 2. 类的属性(成员变量):是组成类的一部分,例如:英雄、血量等等
  2. 1. 成员变量(与局部变量)
  3. 1. 成员变量是在类中声明
  4. 1. 局部变量是在方法中声明(包括形参)
  5. 1. 当局部变量与成员变量同名的时候,可以使用this.调用
  6. ![变量的区别.PNG](https://cdn.nlark.com/yuque/0/2022/png/27938480/1651044367312-2aac671c-8b94-4f2d-8430-7c44c35e06af.png#clientId=u6c4e2afc-cc1c-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=353&id=ucfb054f6&margin=%5Bobject%20Object%5D&name=%E5%8F%98%E9%87%8F%E7%9A%84%E5%8C%BA%E5%88%AB.PNG&originHeight=353&originWidth=832&originalType=binary&ratio=1&rotation=0&showTitle=false&size=19520&status=done&style=none&taskId=ua542d6d2-1e3b-4d73-98c2-1adf6bb5af9&title=&width=832)
  7. 2. 可以定义多个不同类型的属性:整数类型、分数类型、布尔类型、字符类型
  8. 2. 可以是值类型:String[] skins;
  9. 2. 也可以是引用类型:String
  10. 3. 方法:代表类的行为,例如:放大招、移动等等
  11. 1. 一般需要static修饰
  12. 1. 方法体必须被实现
  13. 1. 不同的对象可共用一个方法
  14. ```java
  15. //放大招
  16. public void bigAttack(){
  17. System.out.prinrIn(name+"放的大招");
  18. }
  1. 两种不同的方法
    1. 一种是一般的方法
    2. 构造方法:是通过类创造对象的时候自动调用的方法,一般用于初始化每个对象的变量 ```java public hero(String name,int blood,String[] skins){//hero是类名,通过类创造的对象

}

  1. 1. 主要是用于给属性赋值的方法
  2. 1. 构造方法赋值的时候,最好使用this获取当前对象的属性(this所代表的不是类,是对象)![image.png](https://cdn.nlark.com/yuque/0/2022/png/27938480/1651038661535-d866be1a-8d54-4e93-8559-8f38fc5717a7.png#clientId=ub8910882-b1f0-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=630&id=u4e1c545f&margin=%5Bobject%20Object%5D&name=image.png&originHeight=630&originWidth=1053&originalType=binary&ratio=1&rotation=0&showTitle=false&size=160479&status=done&style=none&taskId=u7b58410b-4e00-489f-ada2-3f15912edfe&title=&width=1053)
  3. 1. 每个类都有一个默认的构造方法,当程序员自定义构造方法之后,默认的构造方法失效,需要自行定义
  4. ```java
  5. //程序的方法入口
  6. public static void main(String[] args){
  7. //使用自定义方法后默认方法失效,需要自行定义,此处为定义代码,创建新对象h1,给对象h1赋值
  8. Hero h1 = new Hero(黄忠,150,new String[]{"老将","炮手"});
  9. h1.bigAttack();
  10. }

面对对象的一些规则概念

重载

  1. 在一个类中是否可以定义两个相同名称的方法?

答案:可以,但是方法的参数必须不同,

  1. 定义概念:将一个类中方法名称一样,方法参数不一样的两个方法称之为重载(Overload)

    1. public class Student{
    2. String name;
    3. public void say(){//此处参数为空,在系统内部此方法名为say
    4. //两处参数不一样,但是类中方法名称一样
    5. }
    6. public void ssay(String name){//此处参数为name,在系统内部此方法名为say_name
    7. //所以说在系统内部他们名称还是不一样的,故没有报错
    8. }
    9. }
  2. 构造方法也支持重载

    1. public class Student {
    2. String name;
    3. //默认的构造方法
    4. public Student(){
    5. //两处参数不一样,但是类中方法名称一样
    6. }
    7. public Student(String name){
    8. this.name = name;
    9. }
    10. }

构造方法

  1. 构造方法(constructor):对象被创建的时候,构造方法会默认调用
  2. 如果一个类不写构造方法,那么这个类就默认存在一个无参构造方法
  3. 一旦自定义构造方法,那么默认的无参构造方法就会失效,如果在new的时候调用了无参的构造方法就会报错,提示最好自己补上无参的构造方法

image.png
image.png
image.png

this的用法

  1. this是对象的内置引用,指向自己,作用:主要用于防止语法的歧义
  2. 用法主要是两个
    1. 使用this指向自己的属性或者方法
    2. 使用this调用构造方法,只能调用有参数的构造方法,如this();this(实参)
      1. 必须是在构造方法的第一行
      2. 不可循环调用

        程序的入口方法

        1. public class Test{
        2. //程序的入口方法
        3. public static void main(String[] args){
        4. Stendent student = new Student(name:"小明",age:15);
        5. //只能调用方法
        6. student.say();
        7. }
        8. }

面向对象思路

先设计方法和属性,再放到面向过程中执行

笔记

image.png