java oop概念_JAVA OOP(一)——OOP概念,类与对象
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概念,类与对象相关推荐
- java输出一个对象_java里面直接输出一个类的对象
Java直接输出一个类的对象的时候,会自动调用这个类的toString方法.这个方法在object类中,而所有的类都继承object类,所以所有的类都有toString方法.当我们不重写该方法时,该方 ...
- java作业 雏田的两个技能 类与对象
java作业 雏田的两个技能 类与对象 雏田类 public class CuTian {String family; // 家族String birth_place; // 出生地String ch ...
- Java—计算长方形的周长和面积(类和对象)
Java-计算长方形的周长和面积(类和对象) Description 设计一个长方形类Rect,计算长方形的周长与面积. 成员变量:整型.私有的数据成员length(长).width(宽): 构造方法 ...
- java中的多态的概念_java中多态的概念
多态的概念 多态==晚绑定. 不要把函数重载理解为多态. 因为多态是一种运行期的行为,不是编译期的行为. 多态:父类型的引用可以指向子类型的对象. 比如 Parent p = new Child(); ...
- java永久冻结_Java如何解决脆弱基类(基类被冻结)问题
概述 大多数好的设计者象躲避瘟疫一样来避免使用实现继承(extends 关系).实际上80%的代码应该完全用interfaces写,而不是通过extends."JAVA设计模式"一 ...
- java matcher遍历_Java的Pattern与Matcher类
Java的Pattern与Matcher类 (一)java.uti java.util 是 java 实用工具类库,该类库提供了一些实用的工具类和数据结构.举个栗子,提供了日期(Data)类.日历(C ...
- java //d+_Java语言程序设计D实验——类与对象实验
Java语言程序设计D实验--类与对象实验 一.实验内容描述(问题域描述) [实验题目]类与对象 [实验目的]使用类来封装对象的属性和功能:掌握类变量与实例变量,以及类方法与实例方法的区别:掌握使用p ...
- JAVA——从基础学起(五)类和对象
五 类和对象 5.1 面向对象概述 在生活中,任何一种随处可见的事物都可以称为对象, 简单来说,类实质上就是用于封装对象属性和行为的载体,而对象是类抽象出来的一个实例. 5.1.1 对象 通常来说,对 ...
- 如何讲清楚 Java 面向对象的问题与知识?(类与对象,封装,继承,多态,接口,内部类...)
二 Java面向对象 类和对象 1.1 什么是面向过程?什么又是面向对象? 面向过程--步骤化 面向过程就是分析出实现需求所需要的步骤,通过函数(方法)一步一步实现这些步骤,接着依次调用即可 面向对象 ...
- 饥荒时用java写的吗_【图片】类与对象面向对象编程【饥荒mod制作吧】_百度贴吧...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 ----------深入饥荒的类 上一节讲完了基本概念,如果还心存疑虑可以百度搜索"类与对象"以获取更多信息 本节将深入研究饥荒代码中 ...
最新文章
- linux下安装boost
- android获取控件宽度高度
- 化工图纸中LISP_化工设备厂参展模型设计制作
- 数据科学 IPython 笔记本 8.12 文本和注解
- ppp lcp协商报文有哪些_PPP 点到点协议
- vue开发环境的搭建流程
- internet与Internet的区别
- 讨论8QAM及16QAM的星座模型
- 可行性分析报告模板(免费)
- Java关于周跨年的周数计算,编写一个JAVA类,用于计算两个日期之间的周数。
- 【图解线性代数】第一章——线性代数的几何意义导读(思维导图)
- “校长”,我的同事,神奇的秋名山车神
- matlab音乐信号处理,数字信号处理课程设计---基于 MATLAB 的音乐信号处理和分析...
- Linux用户态进程监控内存写排查踩内存
- adb: failed to install xxx Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]
- 中科院计算机所副研究员,中科院计算技术研究所副研究员 谭光明
- 悟空 mobile.php,悟空crm系统pc+手机端PHPJAVA源码授权永久使用
- 安卓手机怎么下载java游戏
- ESP32 HTTP 使用入门
- SELECT * FROM DUAL中的DUAL是什么?