zoukankan      html  css  js  c++  java
  • 九天学会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"  + "
    "
                            + " (-.-)" + "
    "
                            + "  |-|"  + "
    "
                            + " /   \" + "
    "
                            + "|     |  __" + "
    "
                            + "|  || | |  \___" + "
    "
                            + "\_||_/_/
    ";
            Cat milkCat = new Cat("I m milkCat", body);
            /**
             * 这句话让实例本身,调用成员函数,即
             * 小奶猫把自己"画"出来
             */
            milkCat.drawMyself();
        }
    }
    
    

    程序输出:

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

    是不是有点意思

  • 相关阅读:
    MATLAB中mexFunction函数的接口规范
    opencv 人脸识别 (一)训练样本的处理
    VS 编程常见错误及解决方法
    在用VC编译下debug和release的什么区别
    OpenCV中Mat的详解
    主成份分析PCA
    人脸识别必读的N篇文章
    opencv有关错误及解决办法
    解决办法:CMake编译时出现“error in configuration process project files may be invalid”
    mybatis 学习笔记(二):mybatis SQL注入问题
  • 原文地址:https://www.cnblogs.com/eecs/p/8849306.html
Copyright © 2011-2022 走看看