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
     (-.-)
      |-|
     /   
    |     |  __
    |  || | |  \___
    \_||_/_/
    
    

    是不是有点意思

  • 相关阅读:
    mybatis 错误 Invalid bound statement (not found)
    Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
    bug 记录 Unable to start ServletWebServerApplicationContext due to multiple ServletWebServerFactory beans
    解决:The Tomcat connector configured to listen on port 8182 failed to start. The port may already be in use or the connector may be misconfigured.
    jquery validate 验证插件 解决多个相同的Name 只验证第一个的方案
    phpStorm+xdebug调试(php7.3)
    小程序视频多个视频播放与暂停
    CSS实现单行、多行文本溢出显示省略号(…)
    Packet for query is too large (4,544,730 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable.
    idea自动在文件头中添加作者和创建时间
  • 原文地址:https://www.cnblogs.com/eecs/p/8849306.html
Copyright © 2011-2022 走看看