第2课第1节_Java面向对象编程_类的引入_P【学习笔记】

摘要:韦东山android视频学习笔记

1. 面向对象编程的引入,我们先写一个简单的程序输出张三,李四的名字。代码如下,假如,现在我们要在名字前面添加籍贯广东,那样岂不是每个printf语句都得修改添加上"广东",对于数量少还是比较方便,数量多还是很麻烦的。

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     char *name1 = "zhangsan";
 6     char *name2 = "lisi";
 7 
 8     printf("%s\r\n",name1);
 9     printf("%s\r\n",name2);
10 
11     return 0;
12 }

2.针对上述程序,我们先引入一个persion结构体。

 1 #include <stdio.h>
 2 
 3 struct persion{
 4     char *name;
 5 };
 6 
 7 int main(void)
 8 {
 9     struct persion p1 = {"zhangsan"};
10     struct persion p2 = {"lisi"};
11 
12     printf("%s\r\n",p1.name);
13     printf("%s\r\n",p2.name);
14 
15     return 0;
16 }

3 在上述的代码基础上,我们在persion结构体加入一个打印名字的函数指针。如下是最终版,这样的话,我们想调整输出的名字,要加上或去掉广东都很方便,只要在

printname函数里操作就可以了。
 1 #include <stdio.h>
 2 
 3 struct persion{
 4     char *name;
 5     void (*printname)(struct persion *per);
 6 };
 7 
 8 void printname(struct persion *per)
 9 {
10     printf("guangdong %s\n",per->name);
11 }
12 
13 
14 int main(void)
15 {
16     struct persion p1 = {"zhangsan",printname};
17     struct persion p2 = {"lisi",printname};
18 
19     p1.printname(&p1);
20     p2.printname(&p2);
21 
22     return 0;
23 }

编译运行,结果如下图:

4.在java中我们写出同样的程序,输出张三、李四两个人的姓名

 1 class Persion {
 2     String name;
 3     String getName(){
 4         return "guangdong " + name;
 5     }
 6 }
 7 
 8 public class Oop{
 9     public static void main(String args[]){
10         Persion p1 = new Persion();
11         p1.name = "zhangsan";
12 
13         Persion p2 = new Persion();
14         p2.name = "lisi";
15 
16         System.out.println(p1.getName());
17         System.out.println(p2.getName());
18     }
19 }

5 在4代码的基础上我们,添加构造函数,在定义对象的时候就把名字传递过去,构造函数的名字跟类名一样,在构造这个对象的时候就会自动执行这个构造方法。

 1 class Persion {
 2     String name;
 3     String getName(){
 4         return "guangdong " + name;
 5     }
 6 
 7     public Persion(String n){
 8         name = n;
 9     }
10 }
11 
12 public class Oop2{
13     public static void main(String args[]){
14         Persion p1 = new Persion("zhangsan");
15 
16         Persion p2 = new Persion("lisi");
17 
18         System.out.println(p1.getName());
19         System.out.println(p2.getName());
20     }
21 }

编译运行结果如下:

6 在5代码的基础上,进行构造函数的重载,同时引入this,如果在一个类里面,类的属性与函数的参数名同名,我们加上this修饰表示是当前对象的属性。

 1 class Persion {
 2     String name;
 3     int age;
 4     String getName(){
 5         return "guangdong " + name;
 6     }
 7 
 8     public Persion(){
 9         name = "null";
10         age = 0;
11     }
12 
13     public Persion(String name){
14         this.name = name; // this.name表示是当前对象属性的name不是函数参数的name
15     }
16 
17     public Persion(String name,int age){
18         this.name = name;
19         this.age = age;
20     }
21 }
22 
23 public class Oop3{
24     public static void main(String args[]){
25         Persion p1 = new Persion("zhangsan");
26         Persion p2 = new Persion("lisi");
27         Persion p3 = new Persion();
28         Persion p4 = new Persion("wangwu",6);
29 
30         System.out.println(p1.getName());
31         System.out.println(p2.getName());
32         System.out.println(p3.getName());
33         System.out.println(p4.getName());
34     }
35 }

 编译运行结果如下:

7 在6代码的基础上,我们添加类方法printPerson,那样我们不需要定义具体的类对象我们就可以直接用这个方法,同时我们添加一个类属性count,用来统计人数的多少。

 1 class Persion {
 2     static int count;
 3     String name;
 4     int age;
 5     String getName(){
 6         return "guangdong " + name;
 7     }
 8 
 9     public Persion(){
10         count ++;
11         name = "null";
12         age = 0;
13     }
14 
15     public Persion(String name){
16         count ++;
17         this.name = name;
18     }
19 
20     public Persion(String name,int age){
21         count ++;
22         this.name = name;
23         this.age = age;
24     }
25 
26     static void printPersion(){
27         System.out.println("This is a class of Persion");
28     }
29 }
30 
31 public class Oop4{
32     public static void main(String args[]){
33         Persion p1 = new Persion("zhangsan");
34         Persion p2 = new Persion("lisi");
35         Persion p3 = new Persion();
36         Persion p4 = new Persion("wangwu",6);
37 
38         System.out.println(p1.getName());
39         System.out.println(p2.getName());
40         System.out.println(p3.getName());
41         System.out.println(p4.getName());
42 
43         Persion.printPersion();
44         System.out.println(Persion.count);
45     }
46 }

编译运行结果如下:

8.在7代码的基础上,我们引入构造代码块, 每实例化一个对象前,都执行;先于构造方法执行。7的例子中我们要在每个构造函数进行count ++,有了构造代码块我们只需要在构造代码块写一次就够了。同时引入静态构造代码块,实例化第一个对象前,执行;只执行一次。

 1 class Persion {
 2     static int count;
 3     String name;
 4     int age;
 5     String getName(){
 6         return "guangdong " + name;
 7     }
 8 
 9     static {
10         System.out.println("static block");
11     }
12 
13     {
14         count ++;
15         System.out.println("construct block");
16     }
17 
18     public Persion(){
19         System.out.println("construct method:Persion 1");
20         name = "null";
21         age = 0;
22     }
23 
24     public Persion(String name){
25         System.out.println("construct method:Persion 2");
26         this.name = name;
27     }
28 
29     public Persion(String name,int age){
30         System.out.println("construct method:Persion 3");
31         this.name = name;
32         this.age = age;
33     }
34 
35     static void printPersion(){
36         System.out.println("This is a class of Persion");
37     }
38 }
39 
40 public class Oop5{
41     public static void main(String args[]){
42         Persion p1 = new Persion("zhangsan");
43         Persion p2 = new Persion("lisi");
44         Persion p3 = new Persion();
45         Persion p4 = new Persion("wangwu",6);
46 
47         System.out.println(p1.getName());
48         System.out.println(p2.getName());
49         System.out.println(p3.getName());
50         System.out.println(p4.getName());
51 
52         Persion.printPersion();
53         System.out.println(Persion.count);
54     }
55 }

编译运行,结果如下:

相关代码存放在github,可以下载https://github.com/zzb2760715357/100ask 

猜你喜欢

转载自www.cnblogs.com/zzb-Dream-90Time/p/10853257.html