九天学会Java,第八天,面向对象

  • 变量和数据类型,赋值和输出
  • 算术运算
  • 选择结构
  • 循环结构
  • 函数定义,函数调用
  • 变量作用域
  • 栈,程序运行的基石
  • 面向对象 <---
  • 异常处理
  • 语言提供的公用包

为什么要有面向对象编程,因为万物皆是对象。

对象是我们描述/建模现实世界的最佳工具。

面向对象是一种思想,将功能封装进对象,强调具备了功能的对象。

举个例子:小汽车是一个对象没问题吧,这个对象有底盘,轮胎,车身,中控等属性。
除此之外,这个对象还具备一些动作,如前进,后退,转弯。

你看,用面向对象来描述世间万物是不是特别地流畅易懂。

说到面向对象,要澄清两个概念,一个是“类”,一个是“实例”。

类是具有相同特性和行为的对象集合,是一个抽象定义。

比如人类就是一个类,而实例是以类为模板,生成有意义的实体。

比如你,我,他都是人类的一个实例,这么类比应该好理解了吧。

先记住类的定义怎么写,参考下面伪代码:

class 类名{

    数据类型  属性 ;
    ….                           
 
    public 返回值的数据类型 方法名称(参数1,参数2…){
        程序语句 ;    
         [return 表达式;]
    }
}

类名

类名告诉计算机,我们对某一类事物进行了抽象,把共同的属性和行为提取出来,请看图:

image

image

第一只小黄猫,第二只小奶猫没问题吧。现在我们把它们都抽象成猫类,都有四肢,尾巴,能跑能吃。

此后,我们就有了猫类这个概念。如果还不能理解,请给我留言。

在src目录右键,New -> Java Class

输入Cat作为类名

/** Cat.java 文件
* 类名,Cat
* 这个类里什么都没定义
*/
public class Cat {

}

以上代码即定义了一个类,类名叫Cat

实例

前面提到的黄猫,奶猫都是猫类的实例。实例不是一个抽象概念,而是一个具体的物体。

在src目录右键,New -> Java Class

输入SeventhLessonOO

public class SeventhLessonOO {
    public static void main(String[] args) {
        /**
         * 新建一个实例,该变量的名字叫milkCat
         */
        Cat milkCat = new Cat();
    }
}

Cat.java 和 SeventhLessonOO.java 都在src目录下

以上代码即实例化了一只奶猫。

构造函数

Java根据构造函数来生成实例。

为了举例说明构造函数怎么使用,修改Cat.java如下

public class Cat {
    private String name;  /* (1) 为了说明构造函数,我们修改Cat的定义,加入name成员变量 */
    /**
    * 这就是构造函数,这个函数没有返回值,也不需要在public后面写void
    * 记住这个语法规则
    */
    public Cat(String name) {
        this.name = name; /* this关键字表示当前实例本身 */
        /*
        * 上面这句话的意思时,函数参数name的值,赋值给实例本身的name,即(1)处定义的private String name;
        */
    }
}

如何调用构造函数

public class SeventhLessonOO {
    public static void main(String[] args) {
        /**
         * 新建一个实例,该变量的名字叫milkCat
         * 由于我们声明了构造函数,则必须使用构造函数
         * 传入一个字符串参数
         * "I m milkCat 会传递给参数name
         */
        Cat milkCat = new Cat("I m milkCat");
    }
}

以上就是调用构造函数的过程,如果还写new Cat();会报错。

因为我们已经声明了构造函数,那么就要按构造函数的定义来生成实例。

成员变量

我们说过,猫这个类,有四肢,有尾巴。现在我们再次修改类的定义

加入body成员变量

public class Cat {
    private String name;  /* (1) 为了说明构造函数,我们修改Cat的定义,加入name成员变量 */
    private String body; /* 新加了body成员变量 */
    /**
     * 这就是构造函数,这个函数没有返回值,也不需要在public后面写void
     * 记住这个语法规则
     * 
     * 新加了body参数
     */
    public Cat(String name, String body) {
        this.name = name; /* this关键字表示当前实例本身 */
        /*
        * 上面这句话的意思时,函数参数name的值,赋值给实例本身的name,即(1)处定义的private String name;
        */
        this.body = body;
    }
}

成员函数

成员函数可以类比成这个类可以有什么动作。猫可以叫,可以跑

为了更好地直观感受成员函数,我们修改Cat这个类,让Cat这个类可以画一只猫

修改Cat.java

public class Cat {
    private String name;  /* (1) 为了说明构造函数,我们修改Cat的定义,加入name成员变量 */
    private String body; /* 新加了body成员变量 */
    /**
     * 这就是构造函数,这个函数没有返回值,也不需要在public后面写void
     * 记住这个语法规则
     *
     * 新加了body参数
     */
    public Cat(String name, String body) {
        this.name = name; /* this关键字表示当前实例本身 */
        /*
        * 上面这句话的意思时,函数参数name的值,赋值给实例本身的name,即(1)处定义的private String name;
        */
        this.body = body;
    }

    /**
     * 定义一个成员函数
     * 通过System打印地方式输出猫的字符样子
     */
    public void drawMyself() {
        System.out.println("Ooooo I am " + this.name);
        System.out.println(body);
    }
}

修改main函数


public class SeventhLessonOO {
    public static void main(String[] args) {
        /**
         * 新建一个实例,该变量的名字叫milkCat
         * 由于我们声明了构造函数,则必须使用构造函数
         * 传入一个字符串参数
         * "I m milkCat 会传递给参数name
         */
        String body =
                          "  A_A"  + "\n"
                        + " (-.-)" + "\n"
                        + "  |-|"  + "\n"
                        + " /   \\" + "\n"
                        + "|     |  __" + "\n"
                        + "|  || | |  \\___" + "\n"
                        + "\\_||_/_/\n";
        Cat milkCat = new Cat("I m milkCat", body);
        /**
         * 这句话让实例本身,调用成员函数,即
         * 小奶猫把自己"画"出来
         */
        milkCat.drawMyself();
    }
}

程序输出:

Ooooo I am I m milkCat
  A_A
 (-.-)
  |-|
 /   \
|     |  __
|  || | |  \___
\_||_/_/

是不是有点意思

posted @ 2018-04-15 20:24  kayv  阅读(283)  评论(0编辑  收藏  举报