对象

什么是对象?

万物皆对象它包括现实中客观存在的事物,也包括抽象的时间、规则、思维。简单点说,对象具有状态、行为和标识。

如果想深入了解面向对象,可以看看我这篇文章:全面化讲解面向对象思想 - 小简博客 (janyork.com)icon-default.png?t=L9C2https://blog.janyork.com/index.php/archives/416/

什么是类?

具有相同特性和行为的对象组成的集合就是类,JAVA实际中的类就是指一个数据类型。

 不理解类也可以看看上面那一篇文章

类是对象的抽象,而对象是类的具体实例
类与对象的关系:抽象(该抽象是名词)与类的实例化就是对象,对象的共性特征抽象(该抽象是动词)出来就是类。
这样说可能过于书面化,不方便理解
我们举个例子

举例讲解

比如你要买一台PC,你在订单上列出了这台PC的CPU和显卡型号、显示屏的大小、键盘是104还是87位、主机的颜色等等,这所有信息组成在一起就是一个电脑的类,但你只有它的参数并没有一个符合这个要求的实物对象,而当服务员拿出了一台符合这个订单的具体PC时,这个PC就是那个类的具体对象
也就是说,对象就是给实体,这个实体承载了类


比如,你买一个苹果,苹果有红的又有青的,有甜的又有酸的,有切好的也有没有切好的,还有许多许多的特征,这些特征都指向一个类苹果类,苹果类里面都是苹果,每个苹果都是一个对象,苹果太多了,我们挑出一个苹果,这个苹果的特征就是类里面的特征,他是个实实在在的实体,而我们所说的“苹果”就是个,这个类里面有各种各样的苹果,而我们放小,拿着苹果或者指着苹果,"这个苹果",那就具体到了一个实体,这个苹果是独一无二

苹果例子可能对于理解力比较差的人,会难以接受


那我们就换个例子
我们先前说过,万物皆为对象,我们就从自身看透本质,将我们自己作为一个对象
我们应该都知道,人也是一个类,我们将可以直立行走,有独立思维,会使用工具统称为人,注意是统称


就像物品分类一样,我们将生物分为动物类与植物类,这两个类又可以分出其他的类,比如动物又分为猴类、两栖类、爬行类等等等等,植物也分了花类、草类、果类等等等等,成千上万说不完,说的通俗点(不严谨点)类就是一个具有相同点的对象的集合或者说所有

我也不多讲,我们不要被这些书面语言带入进去,本身所有思想概念都是人创造的,我们从现实出发类就是分个类别,只要有共同点共同特征)就可以分类,连垃圾都可以垃圾分类,就连现实中人也可以分三六九等,无非就是按共同点分类,有钱的
+人统称为有钱人,没钱人统称为穷人,学计算机编程的人都可以分为程序员,就跟我们现实世界的类一模一样的理解
类里面的对象太多,我们从中跳出一个具体的,比如:人类中有各种人,我们将挑选范围缩小,人类-中的-中国人类-的-男人类-的-
某一个人(对象),这个直接指定的具体的就是对象

类与对象分析图鉴

 

面试经验 

有位大佬实习找工作遇到个印象较深的基础面试问题:

     面试官:男人和女人是同一个类吗?
     我:是同一类。
     面试官:钢笔和铅笔是同一个类吗?
     我:是同一类。
     面试官:男人和钢笔是同一个类吗?
     我犹豫了3秒钟,
     我:不是同一类
     面试官:看来你对基础概念理解的还不到位啊

这里,首先你要懂得万物皆对象,对象都是类的实例,而类是对象的抽象。那么我在JAVA中就可以定义男人和钢笔都是A类或B类或C类,而这个类可以是描述都是看的见或摸的着的特征,亦或是什么都不描述的但就是用来实例化男人和钢笔的类

类可以是你随性定义的),即男人和钢笔是同一类。同理,时间和水是一类吗?思维和手是一类吗?都是的。
其实面试官在这也埋了一个坑----没有交代问题的前提条件。我认为完美的答案应该是

“从生活角度讲,男人和女人是同一类,钢笔和铅笔是同一类,但男人和钢笔不是同一类。 从Java中类与对象的关系来说,男人和女人是同一类,钢笔和铅笔是同一类,男人和钢笔也是同一类。”

面试官还问过我一个对象问题:

    面试官:若我是一个完全不懂IT和编程的人,你能给我解释一下什么是对象吗?
     我:在JAVA中,对象就是一类数据的实例化,他们有着一种或几种的相同特征。
     面试官:你认为一个普通人听得懂这个吗?你只需要说万物皆对象就好,再举几个生活中的例子,没必要                去背概念。

最后,我还是收到了这加公司的Offer,也是我工作生涯所进的第一家公司,也让我认识到了什么叫资产阶级的剥削,当然,这些都是后话了。。。

来源(大佬的CSDN):daponi的博客_CSDN博客

类和对象关系

类(class)和对象(object)是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型。
它们的关系是,对象是类的实例,类是对象的模板。对象是通过new classname产生的,用来调用类的方法;类的构造方法 。

Java中的对象和类

我们先前说过,Java是一个面向对现象的编程语言,Java作为一种面向对象语言。支持以下基本概念:

  • 多态
  • 继承
  • 封装
  • 抽象
  • 对象
  • 实例
  • 方法
  • 重载

这些概念基本知道就可以,后期会深入说明与学习

类中的变量类型

一个类可以包含以下类型变量:

  • 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁
  • 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问
  • 类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型

一个类可以拥有多个方法

如何创建类?

以Java为例,我们刚开始学习Java,是不是要创建一个.java的文件,这个文件就是类文件,也可以叫class文件,我们开头就是写框架,框架的第一句永远是 public class 类名,这其实就是一个创建类
那么我们就知道,创建类的语法就是这样的:

public class 类名{
   //代码块
}  

这就是一个类,class后面接的就是类名

对象的创建

作为程序员入门,我们可能都多多少少听过一些专用的黑话(玩笑话语),比如:万物皆对象 new一个对象.....
那么,我们都知道类和对象是什么了,也知道怎么创建类了
那么,如何创建一个对象呢?我们总说,new一个对象,那么创建对象,new肯定是少不了了!
创建对象的语法语句:

类名 对象名 = new 类名();
假设我们定义一个类,叫Apple,那么,我们的创建对象(对象名one)就是:
Apple one = new Apple();


这里如何创建类和对象就讲完了,因为前面啰嗦太多了,我们进度快一点!
我们先前提到了方法,那么方法是什么呢?有什么用呢?
假设我们上方设定了一个苹果类,也就是Apple类,这个苹果类里面,我们定义几个String变量储存它的颜色、形状..等等特征,这就是这个苹果类的属性,也叫成员变量,这个苹果掉下来了、在地上滚动这些就被称为方法!

创建方法

我们刚开始学Java的框架是一个入口,也就是第二句代码:

public static void main(String[] args){

}                                                               

这其实就是一个方法,我们也经常听到叫它main方法!
我们将main方法拆开看:

访问修饰符 返回类型 方法名(参数列表)

这就是方法的基本语法了,访问修饰符就是public,返回类型这里是void,方法名自己定义,最后面有个括号(),括号里面可以放参数,也可以不放参数,直接一个空括号,带参数叫有参方法不带参数叫无参方法,我们这里用无参来讲解,方法我另写一篇文章来说明!

方法举例

比如:
我们在Apple类中,创建Apple的两个成员变量

public class Apple {
//    定义成员变量,color储存颜色,smell储存味道
    String color;
    String smell;
}

我们再在Apple类中创建一个方法,来输出成员变量!

public class Apple {
//    定义成员变量,color储存颜色,smell储存味道
    String color;
    String smell;

    /*
    *苹果的味道与颜色方法
    */
    public void Attributes(){
        System.out.println(color);
        System.out.println(smell);
    }
}

然后我们新建一个类,类名就叫EatApple(吃苹果)吧!

public class EatApple {
    public static void main(String[] args) {
//        创建苹果1(对象)
        Apple apple1 = new Apple();
//        创建苹果2(对象)
        Apple apple2 = new Apple();
    }
}

注意:我们这里是程序的入口,所有必须是mian方法类名来创建对象!
我们这里创建了两个对象
但是我们Apple类中的两个成员变量还是初始值(String初始值为空):

String color;
String smell;

我们这一个是颜色,一个是味道,我们给apple1和apple2填上属性值,格式是:对象名.成员变量名 = ...;=号后面就和赋值一样,这个应该不要讲吧!

 public class EatApple {
    public static void main(String[] args) {
        Apple apple1 = new Apple();
        apple1.color = "红色";
        apple1.smell = "甜";

        Apple apple2 = new Apple();
        apple2.color = "青色";
        apple2.smell = "酸";
    }
 }

然后我们的Apple类中还有应该方法,用来输出颜色和味道这两个属性,我们给apple1和apple2调用一下

public class EatApple {
    public static void main(String[] args) {
//        创建苹果1(对象)
        Apple apple1 = new Apple();
//        对象1调用苹果类成员变量
        apple1.color = "红色";
        apple1.smell = "甜";
//        调用苹果属性方法
        apple1.Attributes();

//        创建苹果2(对象)
        Apple apple2 = new Apple();
//        对象2调用苹果类成员变量
        apple2.color = "青色";
        apple2.smell = "酸";
//        调用苹果属性方法
        apple2.Attributes();
    }
}

这样,这个程序就写好了!给你们看看效果:

代码效果

 

 简洁讲解总结

类=一个种类(class)东西
对象=属于该种类的一个对象/物件(object,台湾翻译为‘物件’)
方法=对这个种类的东西都可以进行的操作

比如
我有一辆汽车

public class car {...}

我将这辆汽车起名为”火焰“

car myCar = new car("火焰");

所有的汽车都可以加速(accelerate)和刹车(brake)

public class car 
{
  void accelerate() {...}
  void brake() {...}
}

我可以指定让我的汽车加速

myCar.accelerate();

但虽然都是汽车,我的车和小王的车不是同一辆

注意:myCar != wangCar

扩展举例讲解

:狗这类动物
方法:狗会吠 ,狗会摇尾巴 等等
对象:某一条狗
封装:你只需知道狗会吠就好,无需知道它为什么可以吠,喉咙和舌头怎么运作也不需要知道
继承:狗类继承自犬类,狼类继承自犬类,他们都吃肉,都能跑,这些都是犬类的方法
多态:虽然狼和狗都继承自犬类,但狗类实现了听主人话接口接口,狼类实现了嗷嗷叫接口接口,所以他们就呈现出多态。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐