2022-07-19 第10组 蒋萍 面向对象(2)类与类的关系和封装

面向对象(2)

1、类与类之间的关系

1.1 use……a(行为使用关系)

人使用工具,这个工具不属于人,不是人的属性

人和工具是使用关系

// 旅游要用车
public void travel(Car car){
    // 这里Car 型的car和String型的str用法一样,作为局部变量,还没赋值而已
    // 变量没有赋值也可以调用方法

}
  • ​ 类是引用类型,当不理解我们自己创建的引用数据类型时,就参考String

1.2 has ……a(拥有关系)

人拥有自己的眼睛,是人自己的属性

属于关系

// 有个人一出生,就有年龄,还拥有一直猫
int age;
Cat cat;
public Person(int age,Cat cat){
    this.age = age;
    this.cat = cat;
}
public Person(int age){
    this.age = age;
}

 // 这个人一旦创建出来,就有对应的年龄和猫
Person person = new Person(20,cat);
Person person2 = new Person(20);

什么时候需要用构造器去赋值,就看创建对象是为了干什么,如果是为了调用这个类的方法,建议使用无参构造

如果创建对象需要使用到对象的某个属性,可以使用构造器赋值;

1.3 is……a (继承关系)

2、 this关键字

  • this代表当前类的对象,this就代表当前方法的调用者

image-20220719102810214

  • this既可以调方法也可以调属性,它实际上和对象的作用是一样的

2.1.1 构造器的调用

  • this调用构造器:this(); (不推荐使用)
  • this调用构造器的要求:必须在构造器中才能调用构造器;

​ 还得必须放在第一句;

  • this不能用在static修饰的方法中,static是类层面的,对象没造出来就有了,this是对象层面的,先有类才能有对象;

  • 构造器一般用来赋值,尤其是构造器赋值;

3、 封装

要知道为啥这么干? —— > 整合框架、让代码更整洁

代码层面、思想层面

https://www.cnblogs.com/fulfill/p/15987237.html

3.1 封装步骤

  • 1、属性私有化(private)

  • 2、提供一个公有的set,get方法

​ getter方法可以按照客户期望返回格式化的数据

​ setter方法可以限制和检验setter方法传入的参数是否合法,隐藏对象的内部结构

3.2 正确定义一个类(规矩):

​ 所有属性私有化

	    每个属性都有对应的getter和setter方法

3.3 简单案例:

在Dog类中,加入属性name 和 age,当用户传入的数据不合法,不建议在构造方法里使用条件判断

image-20220719145455702

用封装:

image-20220719145602753

image-20220719150107564

测试类:

image-20220719150224923

运行结果:

image-20220719150417623

其他

  • 保证每个类都有无参构造器

  • 当发现一堆代码要重复使用时,要想到把一堆的方法封装成一个类

  • 异常:

​ 空指针异常:NullPointerException

​ 引用数据类型的默认值,初始值是null

总结:

1、this关键字通常用在构造器赋值,set方法赋值,当形参名和成员变量名相同时,赋值操作

2、封装

  • ​ 思想:把一堆代码封装成方法,把一堆执行操作的方法封装成类

  • ​ 代码:用代码实现封装

3、以后我们的赋值操作:

  • ​ 不再使用对象.属性的方式

  • ​ 使用构造器

  • ​ setter方法

  • ​ 习惯:保证每个类都有无参构造器

写在最后

今天最大的感受就是,,,,,要多敲,敲敲敲
思想是掌握了,代码敲得还是不熟练唉!!!!

posted @ 2022-07-19 20:34  来日可追  阅读(20)  评论(0编辑  收藏  举报