类、对象、实例三者之间的差别

可能还有很大一部分人,包括长时间使用面向对象编程的人,对类、对象、实例三者之间的差别还不是特别清楚。
其实任何一个概念,只要他们的名称不同,那么他们必然就不是一个东西。
废话少说,看定义:

  • 对象 Object:表示的是某一类事物的抽象的名词和概念,是对一类事物的抽象表示。比如,“人”就是一个对象。
  • 实例:根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。比如通过类 Person,创建了两个"人“(对象),分别是张三和李四,张三和李四就是实例,他们身份证号码是不一样的,可能都是男性,可能年龄不一样,但都具有说话或走路等人具有的行为能力。
  • 类 Class:对象在计算机中的表示,如定义一个“人”的类:
<?php

class Person
{
	private $name;

	public function set($name)
	{
		$this->name=$name;
	}

	public function get()
	{
		return $this->name;
	}

	public function run()
	{
		echo $this->name,' can run', PHP_EOL;
	}
}

$zhangsan=new Person; // 创建一个对象或者叫实例化一个对象,该实例是张三
$zhangsan->set('张三');
$lisi->run(); // 张三具有”人“所具备的走路的能力,”走“的方法

$lisi=new Person; // 创建一个对象或者叫实例化一个对象,该实例是李四
$lisi->set('李四');
$lisi->run(); // 李四具有”人“所具备的走路的能力,”走“的方法

想想各个名词本身的定义应该就能很好地对这三个概念进行理解。
但是实际工作中大家一般不会去细分对象和实例的关系,一般认为是一个东西。不过我觉得还是需要进行区分,如果完全是一个东西,何必给出两个概念让人迷糊呢?

这道题要求介绍三种方式来实例化 bean,并比较这三种方式的异同之处。 可能的回答如下: 三种实例化 bean 的方式分别是:构造方法注入、 setter 方法注入以及静态工厂方法注入。 构造方法注入是指在 bean 的定义中通过构造方法传入依赖,如: ```xml <bean id="userDao" class="com.example.UserDao"> <constructor-arg ref="sessionFactory" /> <constructor-arg ref="transactionManager" /> </bean> ``` 这里,`UserDao` 的构造方法需要一个 `SessionFactory` 对象一个 `TransactionManager` 对象作为参数。在 `bean` 的定义中,我们用 `constructor-arg` 元素传入这两个对象的引用。这样一来,当容器创建 `userDao` 实例时,会自动将这两个引用注入到 `UserDao` 的构造方法中。 setter 方法注入似,但是是通过 setter 方法传入依赖,如: ```xml <bean id="userService" class="com.example.UserService"> <property name="userDao" ref="userDao" /> </bean> ``` 这里,`UserService` 有一个 `UserDao` 对象的 setter 方法 `setUserDao`,我们用 `property` 元素指定要设置的属性名引用。这样一来,当容器创建 `userService` 实例时,会自动将 `UserDao` 的实例注入到 `UserService` 中。 静态工厂方法注入是指使用静态方法创建 bean 对象,如: ```xml <bean id="foo" class="com.example.Foo" factory-method="getInstance"> <constructor-arg value="foo" /> </bean> ``` 这里,`Foo` 定义了一个静态方法 `getInstance`,用于创建 `Foo` 实例。在 `bean` 的定义中,我们用 `factory-method` 属性指定要使用的静态方法。这样一来,当容器创建 `foo` 实例时,会调用 `getInstance` 方法创建 `Foo` 对象。 三种方式之间的异同主要在于注入方式不同,但其实它们最终都达到了相似的效果,即将依赖注入到 bean 中,让 bean 可以使用这些依赖。选择哪种方式,主要取决于具体情况。通常来说,构造方法注入更适合必要的依赖,而 setter 方法注入更适合可选的依赖或者需要动态变更的依赖。工厂方法注入则更适合复杂的创建过程或者需要缓存创建的对象
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值