Java/学习Java第三课

一、面向对象

嗯?还没有对象?来帮你new一个,嘿嘿嘿嘿,开玩笑呢!
面向对象的简单理解,就是给你一个菜谱,你对着菜谱做菜,你今天做,明天做,后天做,只要是按着这个菜谱来做的,就是按照他的规则来,菜谱就是模板,而做出来的菜就是实例,实例是按照模板出来的,不管如何,他总是和模板相似,这其实就是面向对象的一个过程。而面向对象的三大基本特点:封装、继承、多态,我们来一一理解。

  • 封装
    • 简单来讲,封装就是一个模板,菜谱就是,它是高级大厨师封装出来的模板,给不会烧菜的小白做参考
  • 继承
    • 这点,可以看作是你用菜谱做菜,不管如何,你要用到里面加调料的步骤,这就是继承
  • 多态
    • 这个最好理解,就是你按照i菜谱做菜,可能真的是小白,第一次勉强做出来了,第二次…第无数次,可能每一次都不一样,而菜谱确是没有变的,这就是多态。

二、一个小小的尝试

  • 创建一个菜谱类Recipe,同时具有一些属性,分别为菜名name和菜的内容content
    1
    2
    3
    4
    class Recipe{
    public String name;
    Public String content;
    }
  • 创建一个实例,炒菜(比如:xxx)
    1
    Recipe xxx = new Recipe();

三、关键内容

刚刚我们尝试了一下,创建一个菜谱类,并包含两个字段,可以简单理解为类的属性,这里我们介绍定义在类中的方法,其实可以简单理解为C语言中的函数(ps:说的不是很谨慎,大概可以这样理解)

  • 方法

    1
    2
    3
    4
    修饰符 方法返回类型 方法名(方法参数列表) {
    若干方法语句;
    return 方法返回值;
    }

    关于修饰符,之前有提到过的
    public 公共的 允许外部调用
    private 私有的 不允许外部调用
    protected 受保护的 不允许外部调用,允许子类调用

  • 方法的传参
    我们在定义方法时,通常需要考虑时候要给这个方法传递参数,这一点很重要,而且在设计完方法后,调用时要对应使用。

    1
    2
    3
    public void setNameAndAge(String name, int age){
    ...
    }

    在使用这个方法时,务必要注意参数的类型

    • 可变参数 (用类型...定义)
      关于这个可变参数,简单理解就是参数可以接受一个数组,从而实现可变参数,注意,务必将属性设置为数组,否则接收参数就会错误!
      1
      2
      3
      public void setName(String... name){
      ...
      }
  • 构造方法
    不知你是否有过疑惑,刚刚实例化是怎么操作的?为什么可以这样?

    1
    Recipe xxx = new Recipe();

    其本质原理是编译器会默认生成一个构造方法,其本质长这个样子

    1
    2
    3
    4
    5
    6
    7
    8
    class Recipe{
    public String name;
    Public String content;

    public Recipe(){

    }
    }

    那么,编译器会自动默认一个,我们可以自己写一个麻?答案是可以的,而且还可以写参数哦,这样就可以实现使用类实例化时就给对象赋一个初始值哦。(ps:若是改变了构造方法,编译器就不会自动创建一个,这样我们在使用中要注意若是我们改变构造方法,让其变为可以接受参数的构造方法,原本不传参数的构造方法就失效了哦,要使用也很简单,再写一遍不就好了,哈哈哈,看下面代码部分。)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Recipe{
    public String name;
    Public String content;

    public Recipe(){

    }
    public Recipe(String name){
    this.name = name;
    }
    }
  • 方法的重载
    通俗来说就是方法名相同,但各自所需传递的参数不同,从而实现不同的功能。