OOP概念,类与对象

OOP——面向对象编程

类与对象

对象

OOP——面向对象编程

首先,我们来举一个例子:

现在我要用用代码实现下列要求,定义一只猫,它的名字叫”小芳”,年龄是“3岁”,并且会叫,叫声是“喵喵~”

我们分析这个要求时会发现,我们需要定义两个变量和一个方法,变量分别是名字和年龄,方法是 cry,我们来写一下看看

public class CatTest{

public static void main(String[] args){

String catName="小芳";

int catAge=3;

cry(catName,catAge);

}

public static void cry(String name,int age){

System.out.println("喵喵~");

System.out.println("我是"+name+",我今年"+age+"岁了。");

}

}

这种实现方式是一种面向过程的结构化程序设计,是一种以过程为核心的编程思想,即分析出解决问题所需要的步骤,然后一一实现,使用时在main方法中再一一调用。这种方法并不是说不好或者不对,但是我们想一下, 如果我养了好几只猫,甚至是我开了个宠物店,养了几十上百只猫,那我做系统的时候难道要定义几十上百个买的变量吗?有些同学会说那用数组啊,大家仔细看,这里名字(catName)是String字符串类型的,而年龄(catAge)是int类型的,我们说过数组只能存储同一类型的数据,而且数组的长度是不能变的,如果我多养一只难道要写一遍程序吗?再说了,如果用把不同类型的数据分成一个数组,那我们如果还有别的变量例如品种,食性,价格等等··每个猫的叫声也不一样,颜色不一样,我们真的能做到简化代码吗?如果真的遇到这种情况我们该怎么办呢?

这里我们就介绍一下我们的新知识——OOP(Object Oriented Programming) 面向对象编程

那我们再从另一个角度出发重新思考一下这个问题,我既然养了这么多猫,那我先找到他们的共同点,然后对每一个猫都单独进行操作这样行不行呢?首先,它们都有 名字,年龄;其次,它们都会 叫。那我如果有一个东西能专门把这些共同的东西封装起来,下次我用的时候直接提取是不是要方便很多呢?我们继续往下看~

类与对象

面向对象有两个核心概念——类(Class)和对象(object)

类(Class)的概念

类(Class)定义了一件事物的抽象特点。通常来说,类定义了事物的属性和行为。举例来说,”猫”这个类会包含猫的一切基础特征,例如它的名字、年龄,毛皮颜色和 叫 的能力。

注意:类是对某一事物的描述,是抽象的,概念上的定义

1)定义一个类

定义格式:

class 类名{

...

}

代码案例:

class Cat{

//定义了一个类, 类名是 cat, 代表 “猫”

}

2)定义类的成员(属性(变量)和行为(方法))

每个事物都有自身的属性和行为,所以我们把他们抽象的提取出来,然后定义在类里面,成为它的成员,其中属性是个值,我们定义为变量(成员变量),行为是个动作,我们定义为方法。

a)定义类的成员变量(属性)

例如:我们把“猫”这个事物的属性抽象的提取出来, 它们都有 “名字”,“年龄”,但是重点是我们没有具体指哪个猫,所以我们要定义的是变量“名字”,“年龄”,但是没有值。

代码案例:

class Cat{

String name;

int age;

}

a)定义类的方法(行为)

例如:我们把“猫”的行为提取出来,它们都会“叫”

代码案例:

class Cat{

String name;

int age;

public void cry(String name,int age){

System.out.println("喵喵~");

System.out.println("我是"+name+",我今年"+age+"岁了。");

}

}

对象(object)的概念

对象是类的实例,JAVA中有一句话叫做“万物皆对象”。举例来说,我们说类cat是指“猫”这个类别,而我们说的对象,就是专指某 一 个 猫!这个猫叫“小芳”,年龄是“3岁”。我们现在不是对变量名字和年龄进行操作,而是对这个叫小芳的猫进行操作。

注意:对象是实际存在的该事物的个体,是具体的,现实的

1)创建一个对象

我们学到基本数据类型时就说过,JAVA中有很多种类型,以后我们也会自己创建类型,就int而言,int代表了整型,同样的,我们创建的类Cat 也一样,它被我们定义为代表了“猫”的类型。int代表了一个整型,它是一个类别,并不是单指某一个整数,所以我们定义或者说指定某一个具体的整数(例如18)时会这么写

int age=18;

这样就定义了一个int类型的变量age,用age来存这个具体的数18;

同样的,我们的Cat类型也一样,它代表了一个“猫”的类型,但是不是单指某一个猫,如果我们要单指某一个猫(例如小芳),那我们就要创建一个变量来指向它,这个时候,我们就称这只猫是一个对象。而这个过程就是创建对象:

创建对象的语法:

引用类型 引用类型变量(引用/变量名/对象名) = new 引用类型();

例如,我们创建一个类Cat的实例(对象)

Cat cat=new Cat();

Cat:指 Cat 类,就像声明整型时的int一样 (int age;)

cat:引用类型变量,也被简称为引用,就像int age;中的age一样,它是一个变量名,也叫对象名,但是一般都简称为“引用”(刚开始会听起来怪怪的,以后习惯就好了)

new Cat();这就是一个对象(或者说是一个创建对象的语句)。这个引用的值不是一个像18一样的具体值,而是指向这个对象,例如:这个cat代表了这个小猫,而小猫是一个真实的个体(对象)。

引用类型变量:

1)引用类型变量可以存储该类对象的地址信息,通常称为“指向该类的对象”,当一个引用类型变量指向该类的对象,就可以通过这个变量对对象实施访问。

2)除8种基本类型之外,用类、接口、数组等声明的变量都称为引用类型变量,简称“引用”。

3)需要记住的是,只要出现new关键字,都是创建了一个对象!

2)访问对象的成员变量,调用对象的方法

我们之前就说过,类定义了一个事物的抽象特点,所以对象肯定是含有这些特点的,那我们怎么调用这些属性和方法。

在面向对象中,我们使用 “.” 代表“…的”,也就是说我们要用引用点出这些属性和方法,

代码案例:

public class CatTest(){

public static void main(String[] args){

Cat cat=new Cat();//创建一个Cat对象

cat.name="小芳";// 访问这个对象的成员变量name,并给它赋值为"小芳"

cat.age=3;// 访问这个对象的成员变量age,并给它赋值为3

cat.cry(cat.name,cat.age);// 调用这个对象的方法cry,给它传值为这个对象的成员变量name和age

}

}

运行结果如下:

喵喵~

我是小芳,我今年3岁了。

3)引用类型变量的赋值

引用类型变量存储的是对象的地址信息, 对引用类型变量的赋值, 除了使用上面的new关键字以外,还可以有另外一种赋值方式, 即:相同类型的引用类型变量之间相互赋值。

代码案例:

Cat cat1=new Cat();

Cat cat2=cat1;

代码分析:新建Cat类型变量cat1,使它指向一个新建对象,然后新建一个Cat类型变量cat2,然后把cat1赋值给cat2。

需要注意的是:引用类型变量之间的赋值不会创建新的对象,但会使两个以上的引用指向同一个对象(两个引用指向的地址信息相同)。什么意思呢,就像我给这个小猫取个名字叫“玛丽”,然后再给它取个小名叫 “二蛋”,这个时候“玛丽”和“二蛋”都是指这只猫,如果“玛丽”的年龄增长1岁,那么“二蛋”的年龄肯定也增长一岁,所以如果多个引用指向一个对象,那么不管使用哪个引用对这个对象进行操作,都会影响所有对该对象的引用!

代码案例:

Cat cat1=new Cat();

Cat cat2=cat1;

Cat cat3=cat1;

//这时3个引用都指向同一个对象

cat1.age=4;

cat3.age=5;

System.out.println(cat1.age);

System.out.println(cat1.age);

System.out.println(cat1.age);

运行结果:

5

5

5

4)null和NullPointerException

如果在声明引用类型变量时没有给它赋值,则不能点出(调用)任何属性和方法,因为它并没有指向任何一个对象,就像是基本类型没有赋值一样。

代码案例:

Cat cat;

此代码相当于

Cat cat=null;

此时如果想调用任何属性和方法会发生空指针异常(NullPointerException),异常我们后面会学到,在具体讲。

OOP概念,

java oop概念_JAVA OOP(一)——OOP概念,类与对象相关推荐

  1. java输出一个对象_java里面直接输出一个类的对象

    Java直接输出一个类的对象的时候,会自动调用这个类的toString方法.这个方法在object类中,而所有的类都继承object类,所以所有的类都有toString方法.当我们不重写该方法时,该方 ...

  2. java作业 雏田的两个技能 类与对象

    java作业 雏田的两个技能 类与对象 雏田类 public class CuTian {String family; // 家族String birth_place; // 出生地String ch ...

  3. Java—计算长方形的周长和面积(类和对象)

    Java-计算长方形的周长和面积(类和对象) Description 设计一个长方形类Rect,计算长方形的周长与面积. 成员变量:整型.私有的数据成员length(长).width(宽): 构造方法 ...

  4. java中的多态的概念_java中多态的概念

    多态的概念 多态==晚绑定. 不要把函数重载理解为多态. 因为多态是一种运行期的行为,不是编译期的行为. 多态:父类型的引用可以指向子类型的对象. 比如 Parent p = new Child(); ...

  5. java永久冻结_Java如何解决脆弱基类(基类被冻结)问题

    概述 大多数好的设计者象躲避瘟疫一样来避免使用实现继承(extends 关系).实际上80%的代码应该完全用interfaces写,而不是通过extends."JAVA设计模式"一 ...

  6. java matcher遍历_Java的Pattern与Matcher类

    Java的Pattern与Matcher类 (一)java.uti java.util 是 java 实用工具类库,该类库提供了一些实用的工具类和数据结构.举个栗子,提供了日期(Data)类.日历(C ...

  7. java //d+_Java语言程序设计D实验——类与对象实验

    Java语言程序设计D实验--类与对象实验 一.实验内容描述(问题域描述) [实验题目]类与对象 [实验目的]使用类来封装对象的属性和功能:掌握类变量与实例变量,以及类方法与实例方法的区别:掌握使用p ...

  8. JAVA——从基础学起(五)类和对象

    五 类和对象 5.1 面向对象概述 在生活中,任何一种随处可见的事物都可以称为对象, 简单来说,类实质上就是用于封装对象属性和行为的载体,而对象是类抽象出来的一个实例. 5.1.1 对象 通常来说,对 ...

  9. 如何讲清楚 Java 面向对象的问题与知识?(类与对象,封装,继承,多态,接口,内部类...)

    二 Java面向对象 类和对象 1.1 什么是面向过程?什么又是面向对象? 面向过程--步骤化 面向过程就是分析出实现需求所需要的步骤,通过函数(方法)一步一步实现这些步骤,接着依次调用即可 面向对象 ...

  10. 饥荒时用java写的吗_【图片】类与对象面向对象编程【饥荒mod制作吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 ----------深入饥荒的类 上一节讲完了基本概念,如果还心存疑虑可以百度搜索"类与对象"以获取更多信息 本节将深入研究饥荒代码中 ...

最新文章

  1. linux下安装boost
  2. android获取控件宽度高度
  3. 化工图纸中LISP_化工设备厂参展模型设计制作
  4. 数据科学 IPython 笔记本 8.12 文本和注解
  5. ppp lcp协商报文有哪些_PPP 点到点协议
  6. vue开发环境的搭建流程
  7. internet与Internet的区别
  8. 讨论8QAM及16QAM的星座模型
  9. 可行性分析报告模板(免费)
  10. Java关于周跨年的周数计算,编写一个JAVA类,用于计算两个日期之间的周数。
  11. 【图解线性代数】第一章——线性代数的几何意义导读(思维导图)
  12. “校长”,我的同事,神奇的秋名山车神
  13. matlab音乐信号处理,数字信号处理课程设计---基于 MATLAB 的音乐信号处理和分析...
  14. Linux用户态进程监控内存写排查踩内存
  15. adb: failed to install xxx Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]
  16. 中科院计算机所副研究员,中科院计算技术研究所副研究员 谭光明
  17. 悟空 mobile.php,悟空crm系统pc+手机端PHPJAVA源码授权永久使用
  18. 安卓手机怎么下载java游戏
  19. ESP32 HTTP 使用入门
  20. SELECT * FROM DUAL中的DUAL是什么?

热门文章

  1. AI绘图—对中文拟合度很高,值得一试
  2. 逻辑回归损失函数求导
  3. 将PNG图片转成eps图片的方法
  4. 如何使用dos命令运行sqlserver
  5. nginx配置yum源
  6. 装机步骤(二)之显卡安装和接跳线
  7. 小米8se android q,小米8 SE开始测试安卓Q系统, 国产第一款
  8. zzuli 2134: 维克兹的进制转换 (DP)@
  9. jsp常用的指令与标签
  10. linux ls命令详解