共计 1312 个字符,预计需要花费 4 分钟才能阅读完成。
前言
这几天通过实现 issue 对面向对象有了新的意识。
对象援用
在接触一个子组件父组件的时候,自组件扭转了对象的值,然而并没有传给父组件,最初在父组件保留失效了,那么,他是如何将值传给父组件的呢。
通过潘老师的领导,
我意识到对象与变量的不一样。
首先,咱们这里父组件通过 @input 形式传给子组件了 part 对象。
@Input()
part: Part;
而自组件扭转 part 对象的某个属性,父组件里的 part 对象是跟着变得,换句话说,子组件与父组件为援用的为同一个对象。
咱们看一下《Head First Java》对此内容的介绍,
这几张图形象的阐明了对象援用的规定。通过这张图,咱们能够假如 @input 作用相当于
part(子组件 part 对象) = _part(父组件 part 对象)
这时候咱们就不难理解为什么子组件对象的某一属性扭转而父组件对象属性为什么跟着扭转了。正如第二个图示的那样,
咱们子组件与父组件的变量都指向了同一对象。当一者将对象进行扭转时,另一个人再去读取对象,对象曾经扭转了。
让咱们用一个 demo 来验证
public class Dog {public int weight;}
class dogTest {
@Test
void test() {Dog b = new Dog();
Dog c = new Dog();
c = b;
System.out.println(c.weight);
b.weight = 10;
System.out.println(c.weight);
}
}
正如后面所说,如果两个变量指向同一个对象,那么通过其中一个扭转对象的属性,另一个变量也会扭转。
面向对象三大个性之一——封装
咱们大一学面向对象编程思维的时候常背的就是面向对象三大个性,然而什么是封装没学明确。
其实咱们的我的项目始终在应用封装,比方咱们在后盾加一个字段,通常状况下是在实体类新建一个属性,而后再给他 get 办法和 set 办法,这种做法便是封装。
public class Dog {
private int weight;
public int weight() {return weight;}
public void setWeight(int weight) {this.weight = weight;}
}
咱们留神到,咱们将属性设为公有属性,而通过私有的 weight 与 setWeight 办法进行读取与设置。这是为什么呢
其实咱们当初还没有体现封装的长处。咱们察看这个类,weight 代表狗的分量,分量就应该是一个大于 0 的值。如果咱们设置 weight 为私有属性并通过 dog.weight 传值,咱们就有可能传入一个谬误的值
Dog dog = new Dog();
// 此为谬误演示
dog.weight = -10;
而通过封装,咱们在 setWeight 办法设置校验。
public void setWeight(int weight) {if (weight > 0) {this.weight = weight;}
}
则能够防止数据出错的问题。
尽管咱们当初并没有在理论我的项目中应用封装带来的益处,然而咱们依然进行封装,这容许咱们在将来某一天翻然悔悟时能够疾速更改。
总结
学习是一个实践与实际互相联合的过程,我在大一下学期没学明确的面向对象,将在将来的实际中逐渐了解。