面向对象【一】(类、成员变量、局部变量、匿名对象、封装、private关键字)

面向对象概述

  • 面向过程思想概述
    一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,完成我们的需求。在上面的每一个具体步骤中我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向过程最直接的体现。
    那么什么是面向过程开发呢? 面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。代表语言:C语言

  • 面向对象思想概述
    当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了。这时就开始思索,能不能把这些步骤和功能在进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。

  • 面向对象思想特点
    a:是一种更符合我们思想习惯的思想
    b:可以将复杂的事情简单化
    c:将我们从执行者变成了指挥者角色发生了转换

  • 举例

洗衣服:换下脏衣服—找盆接水—泡一泡—手搓-----漂清----晾干
面向对象:找个对象(洗衣服)、全自动洗衣机(一键洗衣(调用方法))
  • 面向对象特征
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
  • 面向对象开发

    ​ 就是不断的创建对象,使用对象,指挥对象做事情

类就是一组相关属性和功能的集合,对象是该类事物的实例化,例如:学生的实例化之一为班长,班长就是学生类的一个对象。

  • 成员变量和成员方法

    定义类其实就是定义类的成员(成员变量和成员方法)

  • 类的使用
    A:文件名问题
    在一个java文件中写两个类:一个基本的类,一个测试类。
    建议:文件名称和测试类名称一致。
    B:如何使用呢?
    创建对象使用。
    C:如何创建对象呢?
    格式:类名 对象名 = new 类名();
    D:如何使用成员变量呢?
    格式:对象名.变量名
    E:如何使用成员方法呢?
    格式:对象名.方法名(…)

  • 案例:

​ 定义一个手机类并使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//定义类
public class Phone {
//成员变量:定义在类中,方法外
String name = "小米";
double price = 1000;
String color = "白色";

//成员方法
public void call(String name) {
System.out.println("给" + name + "打电话");

}

public void sendMsg(String name, String content) {
System.out.println("给" + name + "发短信,内容是" + content);

}

}
//使用该类
public class TestPhone {
public static void main(String[] args) {
//类是一个抽象的概念,你无法直接使用,要使用类中的属性功能,必须创建该类对象
Phone phone=new Phone();
//获取属性 对象名.属性名
String name=phone.name;
double price = phone.price;
String color = phone.color;
System.out.println(name);
System.out.println(price);
System.out.println(color);
//使用功能:对象名.方法名()

phone.call("张三");
phone.sendMsg("张三","生日快乐");
}
}

成员变量和局部变量的区别

  • 在类中的位置不同

    成员变量:定义在类中方法外

    局部变量:定义在方法中或方法声明上(形参)

  • 在内存位置不同

    成员变量:在堆内存中

    局部变量:在栈内存中

  • 生命周期不同

    成员变量:随对象的创建而存在,随对象的消失而消失

    局部变量:随方法的调用而存在,随方法的弹栈而消失

  • 初始化值不同

    成员变量:有默认初始化值

    局部变量:无默认初始化值,必须赋值才能使用

  • 注意事项:局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则

方法的形式参数是类名的时候如何调用

  • Java中参数传递问题
    形式参数
    基本类型(四类八种):形式参数的改变不影响实际参数
    引用类型:形式参数的改变直接影响实际参数
  • 方法的参数是类名
    如果一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。

匿名对象的概述和应用

  • 匿名对象就是没有名字的对象
  • 应用场景:对象的方法仅使用一次,也可作实际参数传递
1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
//匿名对象调用方法
new Teacher().show(); //每new一次就是一个新的对象
new Teacher().show2();
new Teacher().show();
new Teacher().show();
//匿名对象调用成员变量
int num = new Teacher().num;
System.out.println(num);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class MyTest {
public static void main(String[] args) {
Cat cat = new Cat();
//如果你以后看到一个方法的形参,要一个 类 类型,那么你就传一个该类对象
cat.show(cat, 19);
System.out.println(cat.num);
System.out.println("---------------------");
//匿名对象作为参数传递
//匿名对象可以作为参数传递
cat.show(new Cat(), 20);
System.out.println(cat.num);
}
}


class Cat {
int num = 100;

public void show(Cat cat, int num) {
cat.num = num;
System.out.println(cat.num);//

}
}

输出:
19
19
---------------------
20
19

封装

  • 封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式
  • 好处
    • 隐藏实现细节,提供公共的访问方式
    • 提高了代码的复用性
    • 提高安全性
  • 原则:将不需要对外提供的内容都隐藏起来,提供公共方法对其访问。

private关键字

private是一个权限修饰符,可以修饰成员变量和成员方法,被其修饰只能在本类中被访问,提供get和set方法以供外界访问。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
public class Student {
private String name;
private int age;

public Student() {
}

public Student(String name, int age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}
public void sleep() {
System.out.println("睡觉");
}

public void eat() {
System.out.println("吃饭");
}
}

public class TestStudent {
public static void main(String[] args) {
Student student = new Student();
student.setName("张三");
student.setAge(20);
String name = student.getName();
int age = student.getAge();
System.out.println("姓名:" + name + "=== 年龄" + age);
student.eat();
student.sleep();
System.out.println("-------------------");
Student student1 = new Student();
student1.setName("李四");
student1.setAge(24);
String name1 = student1.getName();
int age1 = student1.getAge();
System.out.println("姓名:" + name1 + "=== 年龄" + age1);
student1.eat();
student1.sleep();
}
}

//输出:
姓名:张三=== 年龄20
吃饭
睡觉
-------------------
姓名:李四=== 年龄24
吃饭
睡觉
-------------本文结束感谢您的阅读-------------
0%