-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
1593 lines (1442 loc) · 230 KB
/
search.xml
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>final关键字</title>
<url>/2020/04/13/final%E5%85%B3%E9%94%AE%E5%AD%97/</url>
<content><![CDATA[<h4 id="final-关键字"><a href="#final-关键字" class="headerlink" title="final 关键字"></a>final 关键字</h4><blockquote>
<p> final关键字代表最终、不可改变的。<br><strong>常见四种用法:</strong><br>1.可以用来修饰一个类<br>2.可以用来修饰一个方法<br>3.还可以用来修饰一个局部变量,<br>4.还可以用来修饰一个成员变量</p>
</blockquote>
<hr>
<h4 id="final关键字用来修饰类的时候"><a href="#final关键字用来修饰类的时候" class="headerlink" title="final关键字用来修饰类的时候"></a>final关键字用来修饰类的时候</h4><ul>
<li>格式:</li>
</ul>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">final</span> <span class="class"><span class="keyword">class</span> 类名称</span>{</span><br><span class="line"><span class="comment">// ...</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>含义:当前这个类不能有任何的子类。(太监类 )</p>
<p>注意:一个类如果是final的,那么其中所有的成员方法都无法覆盖重写(因为没有儿子)</p>
<hr>
<h4 id="final修饰成员方法"><a href="#final修饰成员方法" class="headerlink" title="final修饰成员方法"></a>final修饰成员方法</h4><p>当final关键字用来修饰一个方法的时候,这个方法就是最终方法,也就是不能被覆盖重写。</p>
<ul>
<li>格式</li>
</ul>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line">修饰符<span class="keyword">final</span>. 返回值类型方法名称(参数列表) {</span><br><span class="line"><span class="comment">//方法体</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . println(<span class="string">"父类方法执行! "</span>);</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>注意事项:</p>
<blockquote>
<p>对于类、方法来说,abstract关键字和final关键字不能同时使用,因为矛盾。</p>
</blockquote>
<p><code>public abstract /*final*/ void methodAbs( );</code></p>
<p>final不能覆盖重写,而抽象方法abstract必须覆盖重写,自相矛盾</p>
<a id="more"></a>
<hr>
<h4 id="final关键字修饰局别变量"><a href="#final关键字修饰局别变量" class="headerlink" title="final关键字修饰局别变量"></a>final关键字修饰局别变量</h4><ul>
<li>一旦使用final用来修饰局部变量,那么这个变量就不能进行更改。<br>一次赋值,终生不变</li>
</ul>
<p>例如:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">final</span> <span class="keyword">int</span> num2 = <span class="number">200</span>;</span><br><span class="line">System . out . println(num2); <span class="comment">// 200</span></span><br><span class="line">num2 = <span class="number">250</span>; <span class="comment">//. 错误写法!不能改变!</span></span><br><span class="line">num2 = <span class="number">200</span>; <span class="comment">//错误写法! </span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">final</span> <span class="keyword">int</span> num3;</span><br><span class="line">num3 = <span class="number">30</span>;</span><br><span class="line"> <span class="comment">//正确写法!只要保证有唯一一次赋值即可</span></span><br></pre></td></tr></table></figure>
<ul>
<li><p>对于基本类型来说,不可变说的是变量当中的数据不可改变</p>
<p>对于引用类型来说,不可变说的是变量当中的地址值不可改变</p>
</li>
</ul>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line">Student stu1 = <span class="keyword">new</span> Student( name: <span class="string">"赵丽颖"</span>);</span><br><span class="line">System. out . println(stu1);</span><br><span class="line">System . out . print1n(stu1. getName()); <span class="comment">//赵丽颖</span></span><br><span class="line">stu1 = <span class="keyword">new</span> Student( name: <span class="string">"霍建华"</span>); .</span><br><span class="line">System.out . println(stu1);</span><br><span class="line">System . out . println(stu1. getName()); <span class="comment">//霍建华</span></span><br><span class="line"></span><br><span class="line">System. out . println(<span class="string">"============="</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">final</span> Student stu2 = <span class="keyword">new</span> Student( name:“高圆圆<span class="string">");</span></span><br><span class="line"><span class="string">//错误写法! final的引用类型变量, 其中的地址不可改变</span></span><br><span class="line"><span class="string">stu2=new Student( name:"</span>赵又廷<span class="string">");</span></span><br><span class="line"><span class="string"> </span></span><br><span class="line"><span class="string"> </span></span><br><span class="line"><span class="string">final Student stu2 = new Student( name:“高圆圆"</span>);</span><br><span class="line">stu2. setName(<span class="string">"高圆圆圆圆圆圆"</span>);</span><br><span class="line">System. out . println(stu2. getName()); <span class="comment">//高圆圆圆圆圆圆</span></span><br></pre></td></tr></table></figure>
<ul>
<li>地址值不可以改变,但是里面的内容可以发生改变 ,改成高圆圆圆圆圆圆</li>
</ul>
<hr>
<h4 id="final关键字修饰成员变量"><a href="#final关键字修饰成员变量" class="headerlink" title="final关键字修饰成员变量"></a>final关键字修饰成员变量</h4><blockquote>
<p>对于成员变量来说,如果使用final关键宇修饰,那么这个变量也照样是不可变。</p>
<p>1.由于成员变量具有默认值,所以用了final之后<strong>必须手动赋值</strong>,不会再给默认值了。</p>
<p>2.对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值。二者选其一 。</p>
<p>3.必须保证类当中所有重载的构造方法,都最终会对final的成员变量进行赋值。</p>
</blockquote>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Person</span> </span>{</span><br><span class="line"><span class="keyword">private</span>. <span class="keyword">final</span> string. name = <span class="string">"鹿晗"</span>; <span class="comment">//直接赋值</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Person</span><span class="params">()</span> </span>{</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Person</span><span class="params">(String name)</span> </span>{</span><br><span class="line"><span class="keyword">this</span>.name = name; <span class="comment">//会报错,前面已经赋值,这里就不能再用构造方法赋值</span></span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> String <span class="title">getName</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">return</span> name ;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">setName</span><span class="params">(String name)</span> </span>{</span><br><span class="line"><span class="keyword">this</span>. name = name; <span class="comment">//会报错,前面已经直接赋值</span></span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>可以改成这样:(通过构造进行赋值)</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Person</span> </span>{</span><br><span class="line"><span class="keyword">private</span>. <span class="keyword">final</span> string. name;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Person</span><span class="params">()</span> </span>{</span><br><span class="line"> name = <span class="string">"鹿晗"</span></span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Person</span><span class="params">(String name)</span> </span>{</span><br><span class="line"><span class="keyword">this</span>.name = name; </span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> String <span class="title">getName</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">return</span> name ;</span><br><span class="line">}</span><br><span class="line"><span class="comment">//public void setName(String name) {</span></span><br><span class="line"><span class="comment">//this. name = name; setter方法得注释掉 不能再改了</span></span><br><span class="line"><span class="comment">//}</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<categories>
<category>Java Notes</category>
</categories>
<tags>
<tag>java</tag>
</tags>
</entry>
<entry>
<title>权限修饰符</title>
<url>/2020/04/13/%E6%9D%83%E9%99%90%E4%BF%AE%E9%A5%B0%E7%AC%A6/</url>
<content><![CDATA[<h3 id="权限修饰符"><a href="#权限修饰符" class="headerlink" title="权限修饰符"></a>权限修饰符</h3><p> java中有4种权限修饰符:</p>
<table>
<thead>
<tr>
<th></th>
<th>public</th>
<th>protected</th>
<th>default</th>
<th>private</th>
</tr>
</thead>
<tbody><tr>
<td>同一个类(我自己)</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>同一个包(我邻居)</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
</tr>
<tr>
<td>不同包子类(我儿子)</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td>不同包非子类(陌生人)</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
<td>No</td>
</tr>
</tbody></table>
<hr>
<a id="more"></a>
<h4 id="同一个类的情况"><a href="#同一个类的情况" class="headerlink" title="同一个类的情况"></a>同一个类的情况</h4><figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">package</span> cn. itcast . day11. demo02;</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MyClass</span> </span>{</span><br><span class="line"><span class="keyword">private</span> <span class="keyword">int</span> num = <span class="number">10</span>;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . println(num);</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<blockquote>
<p>这里的<code>num</code>用的是<code>private</code>修饰,因为method是自己类的方法,可以访问</p>
<p>同理,<code>public</code>/<code>protected</code>/或者<code>default(不写)</code>都可以访问<code>num</code></p>
</blockquote>
<hr>
<h4 id="同一个包的情况"><a href="#同一个包的情况" class="headerlink" title="同一个包的情况"></a>同一个包的情况</h4><figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">package</span> cn. itcast . day11. demo02;</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MyClass</span> </span>{</span><br><span class="line"><span class="keyword">private</span> <span class="keyword">int</span> num = <span class="number">10</span>;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . println(num);</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>另一个类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">package</span> cn. itcast . day11. demo02;</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MyAnother</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">anotherMethod</span><span class="params">()</span> </span>{</span><br><span class="line">System . out .print1n(<span class="keyword">new</span> MyClass() . num) ;</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<blockquote>
<p>这里的<code>num</code>用的是<code>private</code>修饰,因为another method是同包不同类的方法,不可以访问</p>
<p>只有<code>public</code>/<code>protected</code>/或者<code>default(不写)</code>可以访问<code>num</code></p>
</blockquote>
<hr>
<h4 id="不同包子类的情况"><a href="#不同包子类的情况" class="headerlink" title="不同包子类的情况"></a>不同包子类的情况</h4><figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">package</span> cn. itcast . day11. demo02;</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MyClass</span> </span>{</span><br><span class="line"><span class="keyword">private</span> <span class="keyword">int</span> num = <span class="number">10</span>;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . println(num);</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>另一个包下的类</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">package</span> cn. itcast . day11. demo02. sub;</span><br><span class="line"><span class="keyword">import</span> cn. itcast. day11. demo02.MyClass ;</span><br><span class="line"><span class="keyword">public</span> c1ass MySon extends MyClass {</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodSon</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . print1n(<span class="keyword">super</span> . num) ;</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<blockquote>
<p>这里的<code>num</code>用的是<code>private</code>修饰,因为<code>methodSon</code>是不同包不同类的方法,不可以访问</p>
<p>只有<code>public</code>/<code>protected</code>可以访问<code>num</code></p>
</blockquote>
<hr>
<h4 id="不同包非子类的情况"><a href="#不同包非子类的情况" class="headerlink" title="不同包非子类的情况"></a>不同包非子类的情况</h4><figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">package</span> cn. itcast . day11. demo02;</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MyClass</span> </span>{</span><br><span class="line"><span class="keyword">private</span> <span class="keyword">int</span> num = <span class="number">10</span>;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . println(num);</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>完全不同包有非子类关系:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">package</span> cn. itcast . day11. demo02. sub;</span><br><span class="line"><span class="keyword">import</span> cn. itcast. day11. demo02.MyClass ;</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Stranger</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodStrange</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . print1n(<span class="keyword">new</span> MyClass() . num) ;</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>Java Notes</category>
</categories>
<tags>
<tag>java</tag>
</tags>
</entry>
<entry>
<title>内部类</title>
<url>/2020/04/13/%E5%86%85%E9%83%A8%E7%B1%BB%E7%9A%84%E6%A6%82%E5%BF%B5%E5%92%8C%E5%88%86%E7%B1%BB/</url>
<content><![CDATA[<h3 id="内部类的概念和分类"><a href="#内部类的概念和分类" class="headerlink" title="内部类的概念和分类"></a>内部类的概念和分类</h3><blockquote>
<p>如果一个事物的内部包含另一个事物,那么这就是一个类内部包含另一个类</p>
<p>例如:身体的心脏的关系</p>
<p> 汽车和发动机的关系</p>
</blockquote>
<ul>
<li><p>分类</p>
<ul>
<li>成员内部类</li>
<li>局部内部类(包含<strong>匿名内部类</strong>)</li>
</ul>
</li>
<li><p>定义成员内部类格式</p>
</li>
</ul>
<blockquote>
<p>修饰符 class (外部)类名称{</p>
<p> 修饰符 class (内部)类名称{</p>
<p> }</p>
<p>}</p>
</blockquote>
<hr>
<p>注意:内用外,可以随意访问;外用内,一定需要借助内部类对象。</p>
<a id="more"></a>
<ul>
<li>代码演示</li>
</ul>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Body</span> </span>{ <span class="comment">//外部类</span></span><br><span class="line"> <span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Heart</span> </span>{ <span class="comment">//成员内部类</span></span><br><span class="line"> <span class="comment">//内部类的方法</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">beat</span><span class="params">()</span> </span>{</span><br><span class="line"> System. out . println(<span class="string">"心脏跳动:蹦蹦蹦! "</span>);</span><br><span class="line"> <span class="comment">//正确写法!</span></span><br><span class="line"> System. out . println(<span class="string">"我叫: "</span> + name); <span class="comment">// 内部类可以随意访问外部</span></span><br><span class="line"> }</span><br><span class="line"> <span class="comment">//外部类的成员变量</span></span><br><span class="line"> <span class="keyword">private</span> String name;</span><br><span class="line"> </span><br><span class="line"> <span class="comment">//外部类的方法</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodBody</span><span class="params">()</span> </span>{</span><br><span class="line"> System . out . print1n( <span class="string">"外部类的方法"</span>);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> String <span class="title">getName</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="keyword">return</span> name ;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">setName</span><span class="params">(String name)</span> </span>{</span><br><span class="line"> <span class="keyword">this</span>. name = name;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<hr>
<h4 id="成员内部类的使用"><a href="#成员内部类的使用" class="headerlink" title="成员内部类的使用"></a>成员内部类的使用</h4><blockquote>
<p>1.间接方式:在外部类的方法当中,使用内部类:然后main只是调用外部类的方法。</p>
<p><strong>main 调用外部,外部调用内部,从而实现main调用内部</strong></p>
</blockquote>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Body</span> </span>{ <span class="comment">//外部类</span></span><br><span class="line"> <span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Heart</span> </span>{ <span class="comment">//成员内部类</span></span><br><span class="line"> </span><br><span class="line"> <span class="comment">//内部类的方法</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">beat</span><span class="params">()</span> </span>{</span><br><span class="line"> System. out . println(<span class="string">"心脏跳动:蹦蹦蹦! "</span>);</span><br><span class="line"> }</span><br><span class="line"> <span class="comment">//外部类的方法</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodBody</span><span class="params">()</span> </span>{</span><br><span class="line"> Heart heart = <span class="keyword">new</span> Heart();</span><br><span class="line"> heart.beat();</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>主类运行:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Demo01InnerClass</span> </span>{</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"> Body body = <span class="keyword">new</span> Body(); <span class="comment">//外部类的对象</span></span><br><span class="line"><span class="comment">//通过外部类的对象,调用外部类的方法,里面间接在使用内部类Heart</span></span><br><span class="line"> body.methodBody();</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<blockquote>
<p>2 直接方式:公式</p>
<p>类名称 对象名 = new 类名称();</p>
<p>外部类名称.内部类名称 对象名 = new 外部类名称().new内部类名称();</p>
</blockquote>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line">Body .Heart heart = <span class="keyword">new</span> Body() . <span class="keyword">new</span> Heart( );</span><br><span class="line">heart.beat();</span><br></pre></td></tr></table></figure>
<hr>
<h4 id="内部类的同名变量访问"><a href="#内部类的同名变量访问" class="headerlink" title="内部类的同名变量访问"></a>内部类的同名变量访问</h4><blockquote>
<p>如果出现重名,怎么访问外部类的成员变量?</p>
<p>格式: <code>外部类名称.this.变量名</code></p>
</blockquote>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">package</span> cn. itcast . day11. demo03;</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Outer</span> </span>{</span><br><span class="line"> <span class="keyword">int</span> num = <span class="number">10</span>; <span class="comment">//外部类的成员变量</span></span><br><span class="line"> <span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Inner</span></span>{</span><br><span class="line"> <span class="keyword">int</span> num = <span class="number">20</span>; <span class="comment">//内部类的成员变量</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodInner</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="keyword">int</span> num = <span class="number">30</span>; <span class="comment">//内部类方法的局部变量</span></span><br><span class="line"> System.out.println(num); <span class="comment">//局部变量,就近原则</span></span><br><span class="line"> System.out.println(<span class="keyword">this</span>.num);</span><br><span class="line"> System.out.println(Outer.<span class="keyword">this</span>.num); </span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<hr>
<h4 id="局部内部类定义"><a href="#局部内部类定义" class="headerlink" title="局部内部类定义"></a>局部内部类定义</h4><blockquote>
<p>如果一个类是定义在一个方法内部的,那么这就是一 个局部内部类。<br>“局部”只有当前所属的方法才能使用它,出了这个方法外面就不能用了。</p>
<p>定义格式:<br>修饰符class外部类名称{<br>修饰符返回值类型外部类方法名称(参数列表) {<br>class局部内部类名称{<br>}<br>}</p>
<p><strong>类放在方法里面</strong></p>
</blockquote>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> c1ass Outer {</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">pethodouter</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="class"><span class="keyword">class</span> <span class="title">Inher</span> </span>{ <span class="comment">//局部内部类</span></span><br><span class="line"> intnum=<span class="number">10</span>;.</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodInner</span><span class="params">()</span> </span>{</span><br><span class="line"> System. out. println(num); <span class="comment">// 10 </span></span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<ul>
<li>如何调用这个局部内部类?</li>
</ul>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Outer</span> </span>{</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodOuter</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="class"><span class="keyword">class</span> <span class="title">Inner</span> </span>{ <span class="comment">//局部内部类</span></span><br><span class="line"> <span class="keyword">int</span> num = <span class="number">10</span>;</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodInner</span><span class="params">()</span> </span>{</span><br><span class="line"> System. out . print1n(num); <span class="comment">// 10</span></span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> Inner inner = <span class="keyword">new</span> Inner(); <span class="comment">//这两排调用局部方法必须在methodOuter里面编写</span></span><br><span class="line"> inner . methodInner();</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<hr>
<h4 id="权限修饰符在不同的类中是使用"><a href="#权限修饰符在不同的类中是使用" class="headerlink" title="权限修饰符在不同的类中是使用"></a>权限修饰符在不同的类中是使用</h4><p>public > protected > (default) > private :<br>定义一个类的时候,权限修饰符规则:</p>
<p>1.外部类: public / (default)<br>2.成员内部类: public / protected / (default) / private<br>3.局部内部类: 什么都不能写</p>
<hr>
<h4 id="局部内部类的final问题"><a href="#局部内部类的final问题" class="headerlink" title="局部内部类的final问题"></a>局部内部类的final问题</h4><p>局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是[有效final的]。</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">package</span> cn<span class="number">.1</span>tcast. day1l. demob4j</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MyOuter</span> </span>{</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodOuter</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="keyword">int</span> num = <span class="number">10</span>;</span><br><span class="line"> <span class="comment">//所在方法的局部变量</span></span><br><span class="line"> num = <span class="number">20</span>;</span><br><span class="line"> <span class="class"><span class="keyword">class</span> <span class="title">MyInner</span> </span>{</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodInner</span><span class="params">()</span> </span>{</span><br><span class="line"> System. out . print1n(num) ;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<blockquote>
<p>这样就会报错,<code>num</code>不可再更改</p>
<p>可以<code>final int num =10</code>,也可以省略<code>final</code>,但是不可以改,省略了也不可以改,改就错</p>
</blockquote>
<hr>
<h4 id="匿名内部类"><a href="#匿名内部类" class="headerlink" title="匿名内部类"></a>匿名内部类</h4><blockquote>
<p>如果接口的实现类(或者是父类的子类)只需要使用唯一-的一次,<br>那么这种情况下就可以省略掉该类的定义,而改为使用[匿名内部类]。<br>匿名内部类的定义格式:<br>接口名称_对象名二new.接口名称() {<br>//覆盖重写所有抽象方法<br>};</p>
</blockquote>
<ul>
<li>代码举例</li>
</ul>
<p>定义一个接口</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">package</span> cn. itcast . day11. demo05 ;</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">interface</span> <span class="title">MyInterface</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">method</span><span class="params">()</span></span>; <span class="comment">//抽象方法</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>main:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">DemoMain</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"><span class="comment">// MyInterface obj = new MyInterfaceImpl();</span></span><br><span class="line"><span class="comment">// obj.method(); </span></span><br><span class="line"><span class="comment">// MyInterface some = new MyInterface(); //错误写法!</span></span><br><span class="line"></span><br><span class="line"><span class="comment">//使用匿名内部类</span></span><br><span class="line">MyInterface obj = <span class="keyword">new</span> MyInterface() {</span><br><span class="line"> <span class="meta">@Override</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">()</span> </span>{</span><br><span class="line"> System . out . println( <span class="string">"匿名内部类实现了方法! "</span>);</span><br><span class="line"> }</span><br><span class="line"> };</span><br><span class="line"> obj.method(); <span class="comment">//会输出 匿名内部类实现了方法! </span></span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<ul>
<li>总结:</li>
</ul>
<blockquote>
<p>这个匿名内部类就顶替了我们之前写接口时的所需要写的实现类</p>
<p>因为我们之前说过,要想使用接口,必须要有实现类,并且实现类需要override所有的抽象方法,然后再再main方法中调用他,显然这是很复杂而且很多余的</p>
<p>因此,如果我们有匿名内部类的话,我们就可以直接顶替掉之前的写法,直接就可以用了,这样是很方便很简单的,十分有用</p>
</blockquote>
]]></content>
<categories>
<category>Java Notes</category>
</categories>
<tags>
<tag>java</tag>
</tags>
</entry>
<entry>
<title>特殊成员变量</title>
<url>/2020/04/13/%E7%89%B9%E6%AE%8A%E7%9A%84%E6%88%90%E5%91%98%E5%8F%98%E9%87%8F/</url>
<content><![CDATA[<h3 id="特殊的成员变量"><a href="#特殊的成员变量" class="headerlink" title="特殊的成员变量"></a>特殊的成员变量</h3><h4 id="如何用类成员作为游戏变量"><a href="#如何用类成员作为游戏变量" class="headerlink" title="如何用类成员作为游戏变量"></a>如何用类成员作为游戏变量</h4><p>定义一个剑类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">package</span> cn. itcast . day11. demo06;</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Weapon</span> </span>{</span><br><span class="line"> <span class="keyword">private</span> String code; <span class="comment">//武器的代号</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Weapon</span><span class="params">()</span> </span>{</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Weapon</span><span class="params">(String code)</span> </span>{</span><br><span class="line"> <span class="keyword">this</span>.code = code;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> String <span class="title">getCode</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">return</span> code;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">setCode</span><span class="params">(String code)</span> </span>{</span><br><span class="line"><span class="keyword">this</span>.code = code;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<a id="more"></a>
<p>定义一个英雄类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="comment">//游戏当中的英雄角色类</span></span><br><span class="line">pub1ic <span class="class"><span class="keyword">class</span> <span class="title">Hero</span> </span>{</span><br><span class="line"><span class="keyword">private</span> String name; <span class="comment">//. 英雄的名字</span></span><br><span class="line"><span class="keyword">private</span> <span class="keyword">int</span> age; <span class="comment">//英雄的年龄</span></span><br><span class="line"><span class="keyword">private</span> Neapon weapon; <span class="comment">//英雄的武器</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Hero</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Hero</span><span class="params">(String name, <span class="keyword">int</span> age, Weapon weapon)</span> </span>{</span><br><span class="line"><span class="keyword">this</span>.name = name ;</span><br><span class="line"><span class="keyword">this</span>.age = age;</span><br><span class="line"><span class="keyword">this</span> .weapon = weapon;</span><br><span class="line">} </span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">attack</span><span class="params">()</span> </span>{</span><br><span class="line">System.out.println(<span class="string">"年龄为"</span> + age + <span class="string">"的"</span> + name + <span class="string">"用"</span> weapon. getCode() + <span class="string">"攻击敌方。"</span>);</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> String <span class="title">getName</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">return</span> name ;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">setName</span><span class="params">(String name)</span> </span>{</span><br><span class="line"><span class="keyword">this</span>. name = name;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">int</span> <span class="title">getAge</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">return</span> age;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">setAge</span><span class="params">(<span class="keyword">int</span> age)</span> </span>{</span><br><span class="line"><span class="keyword">this</span>.age = age;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> Weapon <span class="title">getWeapon</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">return</span> weapon;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">setWeapon</span><span class="params">(Weapon weapcn)</span> </span>{</span><br><span class="line"><span class="keyword">this</span> . weapon = weapon;</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>主方法运行一下:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">package</span> cn. itcast . day11.demo06;</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">DemoMain</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"><span class="comment">//创建一个英雄角色</span></span><br><span class="line">Hero hero = <span class="keyword">new</span> Hero();</span><br><span class="line"><span class="comment">//为英雄起一个名字,并且设置年龄</span></span><br><span class="line">hero. setName(<span class="string">"盖伦"</span>);</span><br><span class="line">hero. setAge(<span class="number">20</span>);</span><br><span class="line"><span class="comment">//创建一个武器对象</span></span><br><span class="line">Weapon weapon = <span class="keyword">new</span> Weapon( code: “多兰剑<span class="string">");</span></span><br><span class="line"><span class="string">//为英雄配备武器</span></span><br><span class="line"><span class="string">hero. setWeapon(weapon);</span></span><br><span class="line"><span class="string">hero. attack();</span></span><br><span class="line"><span class="string">}</span></span><br><span class="line"><span class="string">}</span></span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>Java Notes</category>
</categories>
<tags>
<tag>java</tag>
</tags>
</entry>
<entry>
<title>object类</title>
<url>/2020/04/13/Object%20%E7%B1%BB/</url>
<content><![CDATA[<h3 id="Object-类"><a href="#Object-类" class="headerlink" title="Object 类"></a>Object 类</h3><blockquote>
<p>object类是所有类的父类,是java中最基层的类</p>
<p>因此在继承的时候可以省略<code>extends object</code></p>
</blockquote>
<p><img src="C:%5CUsers%5CKOBE%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200413110930864.png" alt="image-20200413110930864"></p>
<hr>
<h4 id="object类常用的几种方法"><a href="#object类常用的几种方法" class="headerlink" title="object类常用的几种方法"></a>object类常用的几种方法</h4><ul>
<li><p>getClass()方法</p>
<p><strong><em>返回对象执行时的class实例</em></strong></p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Demo</span> </span>{</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"> object[] arr = <span class="keyword">new</span> object[<span class="number">4</span>];</span><br><span class="line"> arr[<span class="number">0</span>] = <span class="keyword">new</span> object();</span><br><span class="line"> arr[<span class="number">1</span>] = <span class="keyword">new</span> String(<span class="string">"字符串"</span>);</span><br><span class="line"> arr[<span class="number">2</span>] = <span class="keyword">new</span> Integer(<span class="number">10</span>);</span><br><span class="line"> arr[<span class="number">3</span>] = <span class="keyword">new</span> Demo();</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">for</span>(object obj:arr){</span><br><span class="line"> System . out . print1n(obj.getClass());</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>执行结果:</p>
<blockquote>
<p>class java. lang. object<br>class java. lang. String .<br>class java. lang. Integer<br>class Demo</p>
</blockquote>
<p><strong>返回了我这个对象是全名</strong></p>
<a id="more"></a>
</li>
<li><p>toString()方法</p>
<p><strong><em>将对象返回为字符串形式</em></strong></p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">for</span>(object obj:arr){</span><br><span class="line"> System . out . print1n(obj.toString());</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>执行结果:</p>
<blockquote>
<p>java .lang . object@1db9742<br>字符串<br>10<br>Demo@106d69c</p>
</blockquote>
<p><strong>如果我们不写<code>.toString()</code>方法,也会自动调用该方法</strong>,</p>
<p><strong>例如<code>System . out . print1n(obj);</code></strong></p>
</li>
<li><p>equals()方法</p>
<p><strong><em>比较两个对象是否相等</em></strong></p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Demo</span> </span>{</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"> object[] arr = <span class="keyword">new</span> object[<span class="number">4</span>];</span><br><span class="line"> arr[<span class="number">0</span>] = <span class="keyword">new</span> object();</span><br><span class="line"> arr[<span class="number">1</span>] = <span class="keyword">new</span> Demo();</span><br><span class="line"> arr[<span class="number">2</span>] = arr[<span class="number">0</span>];</span><br><span class="line"> arr[<span class="number">3</span>] = <span class="keyword">new</span> object();</span><br><span class="line"></span><br><span class="line"> System . out . print1n(arr[<span class="number">0</span>].equals(arr[<span class="number">1</span>])); <span class="comment">//false</span></span><br><span class="line"> System . out . print1n(arr[<span class="number">0</span>].equals(arr[<span class="number">2</span>])); <span class="comment">//true</span></span><br><span class="line"> System . out . print1n(arr[<span class="number">0</span>].equals(arr[<span class="number">3</span>])); <span class="comment">//false </span></span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<hr>
<h4 id="实例:-检测是否是同一个人"><a href="#实例:-检测是否是同一个人" class="headerlink" title="实例:(检测是否是同一个人)"></a>实例:(检测是否是同一个人)</h4><p><strong><em>person类</em></strong></p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Person</span> 1</span>{</span><br><span class="line"> String name ;</span><br><span class="line"> String id;</span><br><span class="line"></span><br><span class="line"> <span class="meta">@Override</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">boolean</span> <span class="title">equals</span><span class="params">(object obj)</span> </span>{</span><br><span class="line"> Person p = (Person) obj;</span><br><span class="line"> <span class="keyword">boolean</span> b1 = <span class="keyword">this</span>. name.equals(p. name);</span><br><span class="line"> <span class="keyword">boolean</span> b2 = <span class="keyword">this</span>.id.equals(p.id);</span><br><span class="line"> <span class="keyword">return</span> b1 && b2;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p><strong><em>主类</em></strong></p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Demo</span> </span>{</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"> Person p1 = <span class="keyword">new</span> Person();</span><br><span class="line"> Person p2 = <span class="keyword">new</span> Person();</span><br><span class="line"> Person p3 = <span class="keyword">new</span> Person();</span><br><span class="line"> Person p4 = <span class="keyword">new</span> Person();</span><br><span class="line"> </span><br><span class="line"> p1. name=<span class="string">"小明"</span>;</span><br><span class="line"> p1. id= <span class="string">"123"</span>;</span><br><span class="line"> p2. name=<span class="string">"小红"</span>;</span><br><span class="line"> p2. id=<span class="string">"123"</span>;</span><br><span class="line"> p3. name=<span class="string">"小明"</span>;</span><br><span class="line"> p3. id= <span class="string">"456"</span>;</span><br><span class="line"> p4. name=<span class="string">"小明"</span>;</span><br><span class="line"> p4. id= <span class="string">"123"</span>;</span><br><span class="line"> </span><br><span class="line"> System. out . print1n(p1. equals(p2)); <span class="comment">//false</span></span><br><span class="line"> System. out . print1n(p2. equals(p3)); <span class="comment">//false</span></span><br><span class="line"> System. out . print1n(p1. equals(P3)); <span class="comment">//false</span></span><br><span class="line"> System. out . print1n(p1. equals(P4)); <span class="comment">//true</span></span><br><span class="line"> System. out . print1n(p1==p4); <span class="comment">//false</span></span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>
</li>
</ul>
<h4 id="java中equals和-的区别"><a href="#java中equals和-的区别" class="headerlink" title="java中equals和==的区别"></a>java中equals和==的区别</h4><p> <a href="https://baijiahao.baidu.com/s?id=1652442464525126879&wfr=spider&for=pc" target="_blank" rel="noopener">参考文献</a></p>
]]></content>
<categories>
<category>Java Notes</category>
</categories>
<tags>
<tag>java</tag>
</tags>
</entry>
<entry>
<title>多态</title>
<url>/2020/04/13/%E5%A4%9A%E6%80%81/</url>
<content><![CDATA[<h3 id="多态"><a href="#多态" class="headerlink" title="多态"></a>多态</h3><blockquote>
<p><img src="C:%5CUsers%5CKOBE%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200402094317637.png" alt="image-20200402094317637"></p>
</blockquote>
<h4 id="多态的格式和使用"><a href="#多态的格式和使用" class="headerlink" title="多态的格式和使用"></a>多态的格式和使用</h4><p>代码当中体现多态性,其实就是一句话: 父类引用指向子类对象。<br>格式:<br><code>父类名称 对象名= new 子类名称();</code><br>或者:<br><code>接口名称对象名= new实现类名称();</code></p>
<a id="more"></a>
<p>父类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . print1n(<span class="string">"父类方法"</span>);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodFu</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . println(<span class="string">"父类特有方法"</span>);</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>子类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Zi</span> <span class="keyword">extends</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">( )</span></span>{</span><br><span class="line">System. out . print1n(<span class="string">"子类方法"</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Demo01Multi</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"><span class="comment">//使用多态的写法</span></span><br><span class="line">/左侧父类的引用,指向了右侧子类的对象</span><br><span class="line">Fu obj = <span class="keyword">new</span> Zi();</span><br><span class="line">obj.method(); <span class="comment">//输出子类方法而不是父类方法</span></span><br><span class="line">obj.methodFu(); <span class="comment">//输出父类特有方法</span></span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<hr>
<h4 id="多态中成员变量的使用特点"><a href="#多态中成员变量的使用特点" class="headerlink" title="多态中成员变量的使用特点"></a>多态中成员变量的使用特点</h4><p>访问成员变量的两种方式:<br>1.直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找。<br>2.间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找。</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Demo01MultiField</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"><span class="comment">//使用多态的写法,父类引用指向子类对象</span></span><br><span class="line">Fu obj = <span class="keyword">new</span> Zi();</span><br><span class="line">System. out . println(obj.num); <span class="comment">//父: 10</span></span><br><span class="line"><span class="comment">//System. out. printin(obj.age); //错误写法! 因为父没有age这个变量</span></span><br><span class="line">System.out.print1n(<span class="string">"==========="</span>);</span><br><span class="line">obj. showNum(); <span class="comment">//子类没有覆盖重写,就是父: 10</span></span><br><span class="line">} <span class="comment">//子类如果覆盖重写了,就是子</span></span><br></pre></td></tr></table></figure>
<p>父类</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">package</span> cn. itcast . day10. demo05;</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="keyword">int</span> num = <span class="number">10</span>;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">showNum</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . <span class="function">print <span class="title">Mn</span><span class="params">(num)</span></span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>子类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Zi</span> <span class="keyword">extends</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="keyword">int</span> num = <span class="number">20</span>;</span><br><span class="line"><span class="keyword">int</span> age = <span class="number">16</span>;</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">showNum</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . print1n(num) ;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<hr>
<h4 id="多态中成员方法的使用特点"><a href="#多态中成员方法的使用特点" class="headerlink" title="多态中成员方法的使用特点"></a>多态中成员方法的使用特点</h4><ul>
<li><p>在多态的代码当中,成员方法的访问规则是:<br>看new的是谁,就优先用谁,没有则向.上找。</p>
<p><strong>口诀:编译看左边,运行看右边。</strong></p>
</li>
<li><p><strong>对比一下:</strong></p>
<p>成员变量:编译看左边,运行还看左边。<br>成员方法:编译看左边,运行看右边。</p>
</li>
</ul>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Demo02Mult</span> <span class="title">iMethod</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line">Fu obj = <span class="keyword">new</span> Zi(); <span class="comment">//多态</span></span><br><span class="line">obj . method(); <span class="comment">//父子都有,优先用子</span></span><br><span class="line">obj . methodFu(); <span class="comment">//子类没有,父类有,向上找到父类</span></span><br><span class="line"><span class="comment">//编译看左边,左边是Fu, Fu当中没有methodZi方法, 所以编译报错。</span></span><br><span class="line">obj. methodZi(); <span class="comment">//错误写法!</span></span><br></pre></td></tr></table></figure>
<p>父类</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Fu</span> /*<span class="keyword">extends</span> <span class="title">object</span>*/ </span>{</span><br><span class="line"><span class="keyword">int</span> num = <span class="number">10</span>;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">showNum</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . println( num);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . print1n(<span class="string">"父类方法"</span>);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodFu</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . println(<span class="string">"父类特有方法"</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>子类</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Zi</span> <span class="keyword">extends</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="keyword">int</span> num = <span class="number">20</span>;</span><br><span class="line"><span class="keyword">int</span> age = <span class="number">16</span>;</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">showNum</span><span class="params">()</span> </span>{</span><br><span class="line">System.out.print1n(num);</span><br><span class="line">}</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . println(<span class="string">"子类方法"</span>);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodZi</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . println(<span class="string">"子类特有方法"</span>);</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<hr>
<h4 id="使用多态的好处"><a href="#使用多态的好处" class="headerlink" title="使用多态的好处"></a>使用多态的好处</h4><p><img src="C:%5CUsers%5CKOBE%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200402104505527.png" alt="image-20200402104505527"></p>
<hr>
<h4 id="向上转型"><a href="#向上转型" class="headerlink" title="向上转型"></a>向上转型</h4><p><img src="C:%5CUsers%5CKOBE%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200402113842755.png" alt="image-20200402113842755"></p>
<p>代码实现:</p>
<p>父类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="class"><span class="keyword">class</span> <span class="title">Animal</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">void</span> <span class="title">eat</span><span class="params">()</span></span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>子类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Cat</span> <span class="keyword">extends</span> <span class="title">Animal</span> </span>{</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">eat</span><span class="params">()</span> </span>{</span><br><span class="line">System.out.print1n( <span class="string">"猫吃鱼"</span>);</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>主类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Demo01Main</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[]args)</span></span>{</span><br><span class="line"><span class="comment">//对象的向上转型,就是,父类引用指向之类对象。</span></span><br><span class="line">Animal animal = <span class="keyword">new</span> Cat();</span><br><span class="line">animal.eat();</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<hr>
<h4 id="向下转型"><a href="#向下转型" class="headerlink" title="向下转型"></a>向下转型</h4><p><img src="C:%5CUsers%5CKOBE%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200403085904361.png" alt="image-20200403085904361"></p>
<ul>
<li>对象一旦向上转型为父类,那么久无法调用子类原有特有的内容</li>
<li>对象的向下转型,其实是一个还原的动作<br>代码实现:<br>主类:<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Demo01Main</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"><span class="comment">//对象的向上转型,就是:父类引用指向之类对象。</span></span><br><span class="line">Animal animal = <span class="keyword">new</span> Cat(); <span class="comment">//本来创建的时候是一只猫</span></span><br><span class="line">animal.eat(); <span class="comment">//猫吃鱼</span></span><br><span class="line"><span class="comment">//animal.catchMouse(); //错误写法!</span></span><br><span class="line"><span class="comment">//向下转型,进行“还原”动作</span></span><br><span class="line">Cat cat = (Cat) animal;</span><br><span class="line">cat . catchMouse(); <span class="comment">//猫抓老鼠</span></span><br><span class="line"><span class="comment">//下面是错误的向下转型</span></span><br><span class="line"><span class="comment">//本来new的时候是一只猫, 现在非要当做狗</span></span><br><span class="line">Dog dog = (Dog) animal;</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
子类狗类:<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Dog</span> <span class="keyword">extends</span> <span class="title">Animal</span> </span>{</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">eat</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . println( <span class="string">"狗吃SHIT"</span>);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">watchHouse</span><span class="params">( )</span> </span>{</span><br><span class="line">System. out . print1n(<span class="string">"狗看家"</span>);</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
子类猫类:<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Cat</span> <span class="keyword">extends</span> <span class="title">Animal</span> </span>{</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">eat</span><span class="params">()</span> </span>{</span><br><span class="line">System.out.print1n( <span class="string">"猫吃鱼"</span>);</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
</li>
</ul>
<hr>
<h4 id="instanceof-关键字的使用"><a href="#instanceof-关键字的使用" class="headerlink" title="instanceof 关键字的使用"></a>instanceof 关键字的使用</h4><blockquote>
<p>如何才能知道一个父类引用的对象,本来是什么子类?<br><strong>格式:</strong><br>对象<code>instanceof</code> 类名称<br>这将会得到一个boolean值结果,也就是判断前面的对象能不能当做后面类型的实例</p>
</blockquote>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Demo02Instanceof</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span></span>{</span><br><span class="line">Animal animal = <span class="keyword">new</span> Cat(); <span class="comment">//本来是一只猫</span></span><br><span class="line">animal.eat(); <span class="comment">//猫吃鱼</span></span><br><span class="line"><span class="comment">//如果希望调用子类特有方法,需要向下转型</span></span><br><span class="line"><span class="comment">//判断一下父类引用animal本来是不是Dog</span></span><br><span class="line"><span class="keyword">if</span> (animal <span class="keyword">instanceof</span> Dog) {</span><br><span class="line">Dog dog = (Dog) animal ;</span><br><span class="line">dog. watchHouse();</span><br><span class="line">}</span><br><span class="line"><span class="comment">//判断一下animal本来是不是Cat</span></span><br><span class="line"><span class="keyword">if</span> (animal <span class="keyword">instanceof</span> Cat){</span><br><span class="line">Cat cat = (Cat) animal;</span><br><span class="line">cat. catchMouse();</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<hr>
<h4 id="与接口和多态相关的例题"><a href="#与接口和多态相关的例题" class="headerlink" title="与接口和多态相关的例题"></a>与接口和多态相关的例题</h4><p><img src="C:%5CUsers%5CKOBE%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200403094441124.png" alt="image-20200403094441124"></p>
<ul>
<li>案例要求</li>
</ul>
<p>笔记本电脑(laptop) 通常具备使用USB设备的功能。</p>
<p>在生产时,笔记本都预留了可以插入USB设备的USB接口,但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以。</p>
<p>定义USB接口,具备最基本的开启功能和关闭功能。</p>
<p>鼠标和键盘要想能在电脑上使用,那么鼠标和键盘也必须遵守USB规范,实现USB接口,否则鼠标和键盘的生产出来也无法使用。</p>
<ul>
<li>案例分析:</li>
</ul>
<blockquote>
<p> 进行描述笔记本类,实现笔记本使用USB鼠标、USB键盘<br>●USB接口,包含打开设备功能、关闭设备功能<br>●笔记本类,包含开机功能、关机功能、使用USB设备功能<br>●鼠标类,要实现USB接口,并具备点击的方法<br>●键盘类,要实现USB接口,具备敲击的方法</p>
</blockquote>
<p>电脑类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Computer</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">power0n</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . println( <span class="string">"笔记本电脑开机"</span>);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">power0ff</span><span class="params">()</span> </span>{.</span><br><span class="line">System . out . print1n( <span class="string">"笔记本电脑关机"</span>);</span><br><span class="line">}</span><br><span class="line"><span class="comment">//使用USB设备的万法,使用接口作为万法的爹数</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">useDevice</span><span class="params">(USB usb)</span> </span>{</span><br><span class="line">usb.open(); <span class="comment">//打开设备</span></span><br><span class="line"><span class="keyword">if</span> (usb <span class="keyword">instanceof</span> Mouse) { <span class="comment">// -定要先判断</span></span><br><span class="line">Mouse mouse = (Mouse) usb; <span class="comment">//向下转型</span></span><br><span class="line">mouse.click(); </span><br><span class="line">} </span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span> (usb <span class="keyword">instanceof</span> Keyboard) { <span class="comment">//先判断</span></span><br><span class="line">Keyboard keyboard = (Keyboard) usb; <span class="comment">//向下转型</span></span><br><span class="line">keyboard . type();</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>鼠标类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="comment">//鼠标就是一 -个USB设备</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Mouse</span> <span class="keyword">implements</span> <span class="title">USB</span> </span>{</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">open</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . println(“打开鼠标<span class="string">");</span></span><br><span class="line"><span class="string">}</span></span><br><span class="line"><span class="string">@Override</span></span><br><span class="line"><span class="string">public void close() {</span></span><br><span class="line"><span class="string">System. out .printin("</span>关闭鼠标<span class="string">");</span></span><br><span class="line"><span class="string">白</span></span><br><span class="line"><span class="string">public void click() {</span></span><br><span class="line"><span class="string">System. out . printin( "</span>鼠标点击<span class="string">");</span></span><br><span class="line"><span class="string">}</span></span><br></pre></td></tr></table></figure>
<p>键盘类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="comment">//键盘就是一-个USB设备</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Keyboard</span> <span class="keyword">implements</span> <span class="title">USB</span> </span>{</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">open</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . println(“打开键盘<span class="string">");</span></span><br><span class="line"><span class="string">@Override</span></span><br><span class="line"><span class="string">public void close() {</span></span><br><span class="line"><span class="string">System. out . print1n("</span>关闭键盘<span class="string">");</span></span><br><span class="line"><span class="string">public void type() {</span></span><br><span class="line"><span class="string">System. out . println("</span>键盘输入<span class="string">");</span></span><br><span class="line"><span class="string">}</span></span><br><span class="line"><span class="string">}</span></span><br></pre></td></tr></table></figure>
<p>usb接口:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">interface</span> <span class="title">USB</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">void</span> <span class="title">open</span><span class="params">()</span></span>; <span class="comment">//打开设备</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">void</span> <span class="title">close</span><span class="params">()</span></span>; <span class="comment">//关闭设备</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>主类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line">c1ass Demiomlain{</span><br><span class="line"><span class="function">blic <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"><span class="comment">//首先创建一个笔记本电脑</span></span><br><span class="line">Computer computer = <span class="keyword">new</span> Computer();</span><br><span class="line">computer. power0n( );</span><br><span class="line"><span class="comment">//准备一个鼠标, 供电脑使用</span></span><br><span class="line">Mouse. mouse = <span class="keyword">new</span> Mouse();</span><br><span class="line"><span class="comment">//首先进行向上转型</span></span><br><span class="line">USB usbMouse = <span class="keyword">new</span> Mouse(); <span class="comment">//多态写法</span></span><br><span class="line"><span class="comment">//参数是US8类型,我正好传递进去的就是usB鼠标</span></span><br><span class="line">computer.useDevice(usbMouse);</span><br><span class="line"><span class="comment">//创建一个USB键盘</span></span><br><span class="line">Keyboard keyboard = <span class="keyword">new</span> Keyboard(); <span class="comment">//没有使用多态写法</span></span><br><span class="line"><span class="comment">//方法参数是USB类型,传递进去的是实现类对象</span></span><br><span class="line">computer. useDevice(keyboard); <span class="comment">//正确写法!也发生了向上转型</span></span><br><span class="line"><span class="comment">//使用子类对象,匿名对象,也可以</span></span><br><span class="line">computer. useDevice(<span class="keyword">new</span> Keyboard()); <span class="comment">//也是正确写法</span></span><br><span class="line">computer . powerOff() ;</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>Java Notes</category>
</categories>
<tags>
<tag>java</tag>
</tags>
</entry>
<entry>
<title>eclipse使用小技巧(持续更新...)</title>
<url>/2020/03/29/%E4%BD%BF%E7%94%A8%E6%8A%80%E5%B7%A7/</url>
<content><![CDATA[<h3 id="使用技巧"><a href="#使用技巧" class="headerlink" title="使用技巧"></a>使用技巧</h3><h4 id="快速完成for循环三部件(eclipse不适用)"><a href="#快速完成for循环三部件(eclipse不适用)" class="headerlink" title="快速完成for循环三部件(eclipse不适用)"></a>快速完成for循环三部件(eclipse不适用)</h4><blockquote>
<p>假如要 <code>i=0;i<100;i++</code></p>
<p>只需要 <code>100.fi</code>+回车·</p>
</blockquote>
<a id="more"></a>]]></content>
<categories>
<category>Java Notes</category>
</categories>
<tags>
<tag>java</tag>
</tags>
</entry>
<entry>
<title>数学工具Maths类</title>
<url>/2020/03/29/%E6%95%B0%E5%AD%A6%E5%B7%A5%E5%85%B7Maths%E7%B1%BB/</url>
<content><![CDATA[<h3 id="数学工具Maths类"><a href="#数学工具Maths类" class="headerlink" title="数学工具Maths类"></a>数学工具Maths类</h3><blockquote>
<p> java. util.Math 类是数学相关的工具类,里面提供了大量的静态方法,完成与数学运算操作。</p>
</blockquote>
<ul>
<li><code>public static double abs(double num)</code>: 获取绝对值。有多种重载。</li>
<li><code>public static double ceil (double num)</code>:向上取整。</li>
<li><code>public static double floor(double num)</code>: 向下取整。</li>
<li><code>public static long round(double num)</code>:四舍五入。</li>
</ul>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"><span class="comment">//获取绝对值</span></span><br><span class="line">System . out . print1n(Math . abs(<span class="number">3.14</span>)); <span class="comment">// 3.14</span></span><br><span class="line">System. out . println(Math.abs(<span class="number">0</span>)); <span class="comment">//0</span></span><br><span class="line">System. out . print1n(Math.abs(-<span class="number">2.5</span>)); <span class="comment">// 2.5</span></span><br><span class="line">System . out . print1n(<span class="string">"============="</span>);</span><br><span class="line"><span class="comment">//向上取整</span></span><br><span class="line">System . out . print1n(Math.ceil(<span class="number">3.9</span>)); <span class="comment">// 4.0</span></span><br><span class="line">System . out . print1n(Math.ceil(<span class="number">3.1</span>)); <span class="comment">// 4.0</span></span><br><span class="line">System. out . println(Math.ceil(<span class="number">3.0</span>)); <span class="comment">// 3.0</span></span><br><span class="line">System. . out . print1n(<span class="string">"============="</span>);</span><br><span class="line"><span class="comment">//向下取整,抹零.</span></span><br><span class="line">System . out . print1n(Math.floor(<span class="number">30.1</span>)); <span class="comment">// 30.0</span></span><br><span class="line">System. . out . println(Math. floor(<span class="number">30.9</span>)); <span class="comment">// 30.0</span></span><br><span class="line">System . out . print1n(Math.floor(<span class="number">31.0</span>)); <span class="comment">// 31.0</span></span><br><span class="line">System . out . print1,(<span class="string">"============="</span>);</span><br><span class="line"><span class="comment">//四舍五入 (保留整数)</span></span><br><span class="line">System . out . println(Math. round(<span class="number">20.4</span>)); <span class="comment">// 20 </span></span><br><span class="line">System . out . println(Math. round(<span class="number">10.5</span>)); <span class="comment">// 11</span></span><br></pre></td></tr></table></figure>
<hr>
<a id="more"></a>
<ul>
<li><p>实例</p>
<p>题目:<br>计算在-10.8到5.9之间,绝对值大于6或者小于2. 1的整数有多少个?</p>
<p></p>
</li>
</ul>
<blockquote>
<p>作图分析:</p>
<p></p>
<p>代码分析:</p>
<p>1.既然已经确定了范围,for循环<br>2.起点位置-10. 8应该转换成为-10,两种办法:<br>2.1可以使用<code>Math.ceil</code>方法, 向上(向正方向)取整<br>2.2.强转成为int,自动舍弃所有小数位<br>3.每一个数字都是整数,所以步进表达式应该是<code>num++</code>,这样每次都是+1的。<br>4.如何拿到绝对值: <code>Math. abs</code>方法。<br>5.一旦发现了一个数字, 需要让计数器+ +进行统计。</p>
</blockquote>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Demo04MathPractise</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"><span class="keyword">int</span> count = <span class="number">0</span>; <span class="comment">//符合要求的数量</span></span><br><span class="line"><span class="keyword">double</span> min = -<span class="number">10.8</span>;</span><br><span class="line"><span class="keyword">double</span> max = <span class="number">5.9</span>;</span><br><span class="line"><span class="comment">//这样处理,变量就是区间之内所有的整数</span></span><br><span class="line"><span class="keyword">for</span>(inti=(<span class="keyword">int</span>)min;i<max;i++){</span><br><span class="line"><span class="keyword">int</span> abs = Math.abs(i); <span class="comment">//绝对值</span></span><br><span class="line"><span class="keyword">if</span>(abs》<span class="number">6</span>||abs<<span class="number">2.1</span>){</span><br><span class="line">System. out. print1n(i);</span><br><span class="line">count++;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line">System.out.println(<span class="string">"总共有:”+ count); // 9</span></span><br><span class="line"><span class="string"> }</span></span><br><span class="line"><span class="string">}</span></span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>Java Notes</category>
</categories>
<tags>
<tag>java</tag>
</tags>
</entry>
<entry>
<title>接口</title>
<url>/2020/03/29/%E6%8E%A5%E5%8F%A3/</url>
<content><![CDATA[<h3 id="接口"><a href="#接口" class="headerlink" title="接口"></a>接口</h3><p> <img src="C:%5CUsers%5CKOBE%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200327095507116.png" alt="image-20200327095507116"></p>
<blockquote>
<p>接口就是多个类的公共规范。<br>接口是一种<strong>引用数据类型</strong>,最重要的内容就是其中的 抽象方法。<br>备注:换成了关键宇interface之后,编译生成的字节码文件仍然是: .java –> .class。 .</p>
</blockquote>
<h4 id="如何定义一个接口的格式"><a href="#如何定义一个接口的格式" class="headerlink" title="如何定义一个接口的格式:"></a>如何定义一个接口的格式:</h4> <figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">interface</span> 接口名称</span>{</span><br><span class="line"> <span class="comment">//接口内容</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<ul>
<li><p>如果是Java 7,那么接口中可以包含的内容有:<br>1.常量<br>2.抽象方法</p>
</li>
<li><p>如果是Java 8,还可以额外包含有:<br>3.默认方法<br>4.静态方法</p>
</li>
<li><p>如果是Java 9, 还可以额外包含有:<br>5.私有方法</p>
</li>
</ul>
<hr>
<a id="more"></a>
<h4 id="接口的抽象方法定义"><a href="#接口的抽象方法定义" class="headerlink" title="接口的抽象方法定义"></a>接口的抽象方法定义</h4><p> 在任何版本的Java中,接口都能定义抽象方法。</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">interface</span> <span class="title">MyInterfaceAbstract</span> </span>{</span><br><span class="line"><span class="comment">//这是一个抽象方法</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">void</span> <span class="title">methodAbs1</span><span class="params">()</span></span>;</span><br><span class="line"><span class="comment">//这也是抽象方法</span></span><br><span class="line"><span class="function"><span class="keyword">abstract</span> <span class="keyword">void</span> <span class="title">methodAbs2</span><span class="params">()</span></span>;</span><br><span class="line"><span class="comment">//这也是抽象方法</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodAbs3</span><span class="params">()</span></span>;</span><br><span class="line"><span class="comment">//这也是抽象方法</span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">methodAbs4</span><span class="params">()</span></span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<ul>
<li>注意事项:<ol>
<li>接口当中的抽象方法,修饰符必须是两个固定的关键字: public abstract</li>
<li>这两个关键字修饰符,可以选择性地省略。 (今天刚学,所以不推荐。)</li>
<li>方法的三要素,可以随意定义。</li>
</ol>
</li>
</ul>
<hr>
<h4 id="接口的抽象方法的使用步骤:"><a href="#接口的抽象方法的使用步骤:" class="headerlink" title="接口的抽象方法的使用步骤:"></a>接口的抽象方法的使用步骤:</h4><ol>
<li><p>接口不能直接使用, 必须有一个”实现类”来实现接口<strong>(和抽象的要求类似)</strong></p>
<p>格式:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> 实现类名称 <span class="title">implement</span> 接口名称</span>{</span><br><span class="line"><span class="comment">//</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
</li>
<li><p>接口的实现类必须覆盖重写(实现)接口中<strong>所有的抽象方法</strong>。<strong>(和抽象的要求类似)</strong></p>
<p>实现:去掉abstract关键字,加上方法体大括号。</p>
</li>
</ol>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"> <span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MyInterfaceAbstractImpl</span> <span class="keyword">implements</span> <span class="title">MyInterfaceAbstract</span> </span>{</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodAbs1</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . println(<span class="string">"这是第-一个方法! "</span>);</span><br><span class="line">}</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodAbs2</span><span class="params">()</span>. </span>{.</span><br><span class="line">System. out . println(<span class="string">"这是第二个方法! "</span>);</span><br><span class="line">}</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodAbs3</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . println(<span class="string">"这是第三个方法! "</span>);</span><br><span class="line">}</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodAbs4</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . println(<span class="string">"这是第四个方法!1"</span>);</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<ol start="3">
<li><p>创建实现类的对象,进行使用。</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Demo01Interface</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"><span class="comment">//错误写法!不能直接new接口对象使用。</span></span><br><span class="line"><span class="comment">//MyInterfaceAbstract inter = new MyInterfaceAbstract();</span></span><br><span class="line"><span class="comment">//创建实现类的对象使用</span></span><br><span class="line">MyInterfaceAbstractImpl impl = <span class="keyword">new</span> MyInterfaceAbstractImpl();</span><br><span class="line">impl . methodAbs1();</span><br><span class="line">impl . methodAbs2( );</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
</li>
</ol>
<ul>
<li><p>注意事项:</p>
<blockquote>
<p>如果实现类并没有覆盖重写接口的<strong>所有</strong>抽象方法,那么这个实现类自己就必须是抽象类 </p>
</blockquote>
</li>
</ul>
<hr>
<h4 id="接口的默认方法"><a href="#接口的默认方法" class="headerlink" title="接口的默认方法"></a>接口的默认方法</h4><blockquote>
<p>格式:<br>public <strong>default</strong> 返回值类型方法名称(参数列表) {<br>方法体</p>
<p>}</p>
<p>备注,接口当中的默认方法,<strong>可以解决接口升级的问题</strong>。</p>
</blockquote>
<p>举例:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">interface</span> <span class="title">MyInterfaceDefault</span> </span>{</span><br><span class="line"><span class="comment">//抽象方法</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">void</span> <span class="title">methodAbs</span><span class="params">()</span></span>;</span><br><span class="line"><span class="comment">//新添加了一个抽象方法</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">void</span> <span class="title">methodAbs2</span><span class="params">()</span></span>;</span><br></pre></td></tr></table></figure>
<p>但是当你新添加了一个抽象方法时,你的实现类由于只是重写了一个之前的抽象方法1…</p>
<p>MyInterfaceDefaultA类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MyInterfaceDefaultA</span> <span class="keyword">implements</span> <span class="title">MyhterfaceDefault</span> </span>{</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodAbs</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . println(<span class="string">"实现了抽象方法,AAA"</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>这样程序就会报错,出现问题,因此我们需要有默认方法来解决<strong>接口升级的问题</strong>,只需要将新增加的方法改成<strong>默认方法</strong>就可以</p>
<p><strong>改:</strong></p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">interface</span> <span class="title">MyInterfaceDefault</span> </span>{</span><br><span class="line"><span class="comment">//抽象方法</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">void</span> <span class="title">methodAbs</span><span class="params">()</span></span>;</span><br><span class="line"><span class="comment">//新添加了一个抽象方法</span></span><br><span class="line"><span class="comment">//public abstract void methodAbs2();</span></span><br><span class="line"><span class="comment">//新添加一个默认方法</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">default</span> <span class="keyword">void</span> <span class="title">methodDefault</span><span class="params">()</span></span>{</span><br><span class="line"> System.out.println(<span class="string">"这是一个默认方法"</span>)</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>主类调用一下</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Demo02Interface</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"><span class="comment">//创建了实现类对象</span></span><br><span class="line">MyInterfaceDefaultA a = <span class="keyword">new</span> MyInterfaceDefaultA();</span><br><span class="line">a. methodAbs(); <span class="comment">//调用抽象方法,没有问题,实际运行的是右侧实现类(见MyInterfaceDefaultA类那里)。</span></span><br><span class="line">a. methodDefault();<span class="comment">//默认方法,虽然MyInterfaceDefaultA没有重写这个,但是这是默认方法,不需要,也可以调用</span></span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<ul>
<li>如何实现类也覆盖重写了默认方法,那<strong>也会被修改的</strong></li>
</ul>
<hr>
<h4 id="接口的静态方法"><a href="#接口的静态方法" class="headerlink" title="接口的静态方法"></a>接口的静态方法</h4><blockquote>
<p>从Java 8开始,接口当中允许定义静态方法。<br>提示:就是将abstract或者 defaul t换成static即可,带上方法体。</p>
</blockquote>
<ul>
<li><p>接口静态方法的使用格式</p>
<blockquote>
<p>格式:<br>public static 返回值类型方法名称(参数列表) {<br>方法体</p>
</blockquote>
</li>
</ul>
<p>接口类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">interface</span> <span class="title">MyInterfaceStatic</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">methodStatic</span><span class="params">()</span></span>{</span><br><span class="line">System. out . print1n( <span class="string">"这是接口的静态方法! "</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>实现类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MyInterfaceStaticImpl</span> <span class="keyword">implements</span> <span class="title">MyInterfaceStatic</span> </span>{</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>主类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Demo03Interface</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{ </span><br><span class="line"><span class="comment">//创建了实现类对象</span></span><br><span class="line">MyInterfaceStaticImpl impl = <span class="keyword">new</span> MyInterfaceStaticImp1();</span><br><span class="line"><span class="comment">//错误写法!</span></span><br><span class="line"><span class="comment">//impl.methodStatic();</span></span><br><span class="line"><span class="comment">//直接通过接口名称调用静态方法</span></span><br><span class="line">MyInterfaceStatic . methodStatic();</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<ul>
<li>注意事项:不能通过接口实现类的对象来调用接口当中的静态方法。</li>
<li>正确用法:通过接口名称,直接调用其中的静态方法。<br>格式:<br>接口名称.静态方法名(参数);</li>
</ul>
<hr>
<h4 id="接口的私有方法"><a href="#接口的私有方法" class="headerlink" title="接口的私有方法"></a>接口的私有方法</h4><ul>
<li>接口私有方法的定义</li>
</ul>
]]></content>
<categories>
<category>Java Notes</category>
</categories>
<tags>
<tag>java</tag>
</tags>
</entry>
<entry>
<title>继承</title>
<url>/2020/03/29/%E7%BB%A7%E6%89%BF/</url>
<content><![CDATA[<h3 id="继承"><a href="#继承" class="headerlink" title="继承"></a>继承</h3><blockquote>
<p>面向对象的三大特性:</p>
<p><strong>继承性</strong> (继承是多态的前提)</p>
<p><img src="C:%5CUsers%5CKOBE%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200326075050850.png" alt="image-20200326075050850"></p>
<p>封装性</p>
<p>多态性</p>
</blockquote>
<ul>
<li>继承的格式</li>
</ul>
<blockquote>
<p>在继承的关系中,子类就是一一个父类”。也就是说,子类可以被当做父类看待。<br>例如父类是员工,子类是讲师,那么“讲师就是一一个员工”。 关系: is-a。</p>
<p><strong>定义父类的格式</strong>: (一 个普通的类定义)<br>public class 父类名称{<br>}<br><strong>定义子类的格式</strong>:<br>public class 子类名称extends 父类名称{<br>//<br>}</p>
</blockquote>
<a id="more"></a>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="comment">//定义一个父类:员工</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Employee</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">( )</span> </span>{</span><br><span class="line">System. out . print1n( <span class="string">"方法执行! "</span>);</span><br></pre></td></tr></table></figure>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="comment">//定义了一个员工的子类:讲师</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Teacher</span> <span class="keyword">extends</span> <span class="title">Employee</span> </span>{</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="comment">// 定义了员工的另一个子类:助教</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Assistant</span> <span class="keyword">extends</span> <span class="title">Employee</span> </span>{</span><br></pre></td></tr></table></figure>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Demo01Extends</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line">. <span class="comment">//创建了一个子类对象</span></span><br><span class="line">Teacher teacher = <span class="keyword">new</span> Teacher( );</span><br><span class="line"><span class="comment">// Teacher类当 中虽然什么都没写,但是会继承来自父类的method方法。</span></span><br><span class="line">teacher. method() ;</span><br><span class="line"><span class="comment">//创建另一个子类助教的对象</span></span><br><span class="line">Assistant assistant = <span class="keyword">new</span> Assistant(); </span><br><span class="line">assistant . method();| </span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<hr>
<ul>
<li>继承的成员变量(方法)访问特点</li>
</ul>
<blockquote>
<p>直接通过子类对象访问成员变量。<br>等号左边是谁, 就优先用谁,没有则向上找。<br>间接通过成员方法访问成员变量:<br>该方法属于谁,就优先用谁,没有则向.上找。</p>
</blockquote>
<p>父类</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="keyword">int</span> numFu = <span class="number">10</span>;</span><br><span class="line"><span class="keyword">int</span> num = <span class="number">100</span>;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodFu</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="comment">//使用的是本类当中的,不会向下找子类的</span></span><br><span class="line">System. out . print1n(num);</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>子类</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Zi</span> <span class="keyword">extends</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="keyword">int</span> numZi = <span class="number">20</span>;</span><br><span class="line"><span class="keyword">int</span> num = <span class="number">200</span>;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodZi</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="comment">//因为本类当中有num,所以这里用的是本类的num .</span></span><br><span class="line">System. out . print1n(num); </span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Demo01ExtendsField</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line">Fu fu = <span class="keyword">new</span> Fu(); <span class="comment">//创建父类对象</span></span><br><span class="line">System. out . printin(fu. numFu); <span class="comment">//只能使用父类的东西,没有任何子类内容</span></span><br><span class="line">System. out . print1n(<span class="string">"========="</span>);</span><br><span class="line">Zi zi = <span class="keyword">new</span> Zi();</span><br><span class="line">System. out . println(zi.numFu); <span class="comment">// 10</span></span><br><span class="line">System. out . print1n(zi. numZi); <span class="comment">// 20</span></span><br><span class="line">System. out . print1n(<span class="string">"=========="</span>);</span><br><span class="line"><span class="comment">//等号左边是谁,就优先用谁</span></span><br><span class="line">System. out . println(zi.num); <span class="comment">//优先子类,200</span></span><br><span class="line"><span class="comment">//</span></span><br><span class="line">System. out. printin(zi.abc); <span class="comment">//到处都没有,编译报错!</span></span><br><span class="line">System. out.print1n(=<span class="string">"========="</span>);</span><br><span class="line"><span class="number">1</span>/这个方法是子类的,优先用子类的,没有再向上找</span><br><span class="line">zi . methodZi(); <span class="comment">// 200</span></span><br><span class="line"><span class="comment">//这个方法是在父类当中定义的</span></span><br><span class="line">zi . methodFu(); <span class="comment">// 100</span></span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<hr>
<ul>
<li>父类的成员变量和子类的成员变量和子类的局部变量重名怎么办</li>
</ul>
<blockquote>
<p>局部变量: 直接写成员变量名<br>本类的成员变量: this.成员变量名<br>父类的成员变量: super成员变量名</p>
</blockquote>
<p>代码如下:</p>
<p>父类</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="keyword">int</span> num = <span class="number">10</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>子类</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Zi</span> <span class="keyword">extends</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="keyword">int</span> num = <span class="number">20</span>;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">int</span> num = <span class="number">30</span>;</span><br><span class="line">System. out . println(num); <span class="comment">// 30,局部变量</span></span><br><span class="line">System. out . print1n(<span class="keyword">this</span>.num); <span class="comment">// 20,本类的成员变量</span></span><br><span class="line">System. out . print1n(<span class="keyword">super</span>.num); <span class="comment">// 10,父类的成员变量</span></span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>这样在主方法中执行<code>zi.method()</code>就会显示出30、20、10三种不同的变量值</p>
<hr>
<ul>
<li>继承中方法的覆盖重写</li>
</ul>
<blockquote>
<p>重写. (Override)概念: 在继承关系当中,方法的名称一样,参数列表<strong>也一样</strong>。</p>
<p>重写和重载的区别:</p>
<p>重写 (Override) :方法的名称一样, 参数列表[也一样]。覆盖、覆写。</p>
<p>重载(overload) :方法的名称一样,参数列表<strong>不一样</strong>。</p>
<p>方法的覆盖重写特点: 创建的是子类对象,则优先用子类方法。</p>
</blockquote>
<ul>
<li><p>方法覆盖重写的注意事项:</p>
<ul>
<li>1.必须保证父子类之间方法的名称相同,参数列表也相同。<br>@Override:写在方法前面,用来<strong>检测</strong>是不是有效的正确覆盖重写。<br>这个注解就算不写,只要满足要求,也是正确的方法覆盖重写。</li>
<li>2.子类方法的返回值必须<strong>小于等于</strong>父类方法的返回值范围。<br>小扩展提示: <code>java. lang. object</code>类是所有类的公共最高父类(祖宗类),</li>
</ul>
<p> <code>java. lang. String</code>就是object的子类。</p>
<ul>
<li>3.子类方法的权限必须<strong>大于等于</strong>父类方法的权限修饰符。<br>小扩展提示: public > protected > (default) > private<br>备注: <strong>(default)不是关键字</strong>default, 而是什么都不写,留空。</li>
</ul>
</li>
</ul>
<hr>
<ul>
<li><p>什么时候需要用上方法的覆盖重写呢?</p>
<p><img src="C:%5CUsers%5CKOBE%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200326084328342.png" alt="image-20200326084328342"></p>
</li>
<li><p>代码演示:</p>
</li>
</ul>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="comment">//本来的老款手机</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Phone</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">call</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . println(<span class="string">"打电话"</span>);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">send</span><span class="params">()</span> </span>{ I</span><br><span class="line">System . out . println(<span class="string">"发短信"</span>);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">show</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . println(<span class="string">"显示号码"</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="comment">// 定义一个新手机,使用老手机作为父类</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">NewPhone</span> <span class="keyword">extends</span> <span class="title">Phone</span> </span>{</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">show</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">super</span>. show(); <span class="comment">//把父类的show方法拿过来重复利用</span></span><br><span class="line"><span class="comment">//自己子类再来添加更多内容</span></span><br><span class="line">System.out.print1n(<span class="string">"显示姓名"</span>);</span><br><span class="line">System.out.println(<span class="string">"显示头像"</span>);</span><br></pre></td></tr></table></figure>
<ul>
<li><p>继承关系中,父子类构造方法的访问特点:</p>
<ol>
<li><p>子类构造方法当中有一个默认隐含的“super()”调用,所以一定是<strong>先调用的父类构造,后执行的子类构造</strong>。</p>
</li>
<li><p>子类构造可以通过super关键字来调用父类重载构造。</p>
</li>
<li><p>super的父类构造调用, 必须是子类构造方法的<strong>第一 个语句</strong>。不能一 个子类构造调用多次super构造。</p>
</li>
</ol>
</li>
<li><p>总结:</p>
<ul>
<li>子类<strong>必须</strong>调用父类构造方法,不写则赠送super(); 写了则用写的指定的super调用,super只能有<strong>一个</strong>, 还必须是<strong>第一 个</strong>。</li>
</ul>
</li>
</ul>
<ul>
<li>代码演示</li>
</ul>
<p>父类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Fu</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . println(<span class="string">"父类无参构造"</span>); .</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Fu</span><span class="params">(<span class="keyword">int</span> num)</span> </span>{</span><br><span class="line">System. out . println(<span class="string">"父类有参构造! "</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>子类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Zi</span> <span class="keyword">extends</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Zi</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">super</span>(); <span class="comment">//在调用父类无参构造方法</span></span><br><span class="line"><span class="comment">//super( num: 20); //在调用父类重载的构造方法</span></span><br><span class="line">System. <span class="function">out <span class="title">print1n</span><span class="params">(<span class="string">"子类构造方法! "</span>)</span></span>;</span><br><span class="line">}</span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="comment">//super(); </span></span><br><span class="line"><span class="comment">//错误写法!只有子类构造方法,才能调用父类构造方法。</span></span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<hr>
<h4 id="继承的三个特征"><a href="#继承的三个特征" class="headerlink" title="继承的三个特征"></a>继承的三个特征</h4><ul>
<li><p>Java语言是<strong>单继承</strong>的。</p>
<p>一个类的直接父类只能有唯一一个</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">A</span> </span>{}</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">B</span> <span class="keyword">extends</span> <span class="title">A</span></span>{} <span class="comment">//正确</span></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">C</span> </span>{}</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">D</span> <span class="title">extendsA</span>, <span class="title">C</span></span>{} <span class="comment">//错误</span></span><br></pre></td></tr></table></figure>
</li>
<li><p>Java语言可以多级继承</p>
<p>我有一个父亲,我的父亲还有一个父亲,也就是爷爷</p>
<p><code>java.lang.Object</code>就是祖爷爷,最头头</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">A</span> </span>{}</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">B</span> <span class="keyword">extends</span> <span class="title">A</span></span>{} </span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">C</span> <span class="keyword">extends</span> <span class="title">B</span></span>{}</span><br></pre></td></tr></table></figure>
</li>
<li><p>一个子类的直接父类是唯一的</p>
<p>但是一个父类可以拥有很多子类(可以有很多兄弟姐妹)</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">A</span></span>{}</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">B</span> <span class="keyword">extends</span> <span class="title">A</span></span>{}</span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">C</span> <span class="keyword">extends</span> <span class="title">A</span></span>{}</span><br></pre></td></tr></table></figure>
</li>
</ul>
]]></content>
<categories>
<category>Java Notes</category>
</categories>
<tags>
<tag>java</tag>
</tags>
</entry>
<entry>
<title>构造方法</title>
<url>/2020/03/29/%E6%9E%84%E9%80%A0%E6%96%B9%E6%B3%95/</url>
<content><![CDATA[<h2 id="构造方法"><a href="#构造方法" class="headerlink" title="构造方法"></a>构造方法</h2><h3 id="什么是构造方法?"><a href="#什么是构造方法?" class="headerlink" title="什么是构造方法?"></a>什么是构造方法?</h3><p><strong>构造方法</strong>是专门用来创建对象的方法,当我们通过关键字<strong><em>new</em></strong>创建新的对象的时候,其实就是使用构造方法。</p>
<h3 id="构造方法的格式:"><a href="#构造方法的格式:" class="headerlink" title="构造方法的格式:"></a>构造方法的格式:</h3><blockquote>
<p>public 类名称(参数类型 参数名称){</p>
<pre><code>方法体</code></pre><p>}</p>
<p><strong>注意事项</strong>:</p>
</blockquote>
<ol>
<li><p>构造方法的名称<strong>必须和类名称完全一样</strong>,大小写也要一样</p>
</li>
<li><p>构造方法<strong>不要</strong>写返回值,连void都<strong>不要</strong>写!</p>
</li>
<li><p>构造方法不能return一个返回值</p>
</li>
<li><p>如果没有编写任何构造方法,那么编译器将会自动构造一个,没有参数没有方法体,什么都没有。</p>
</li>
<li><p>如果一旦编写了至少一个构造方法,那么编译器将不会在自动构造</p>
</li>
<li><p>构造方法也可以重载</p>
<a id="more"></a>
</li>
</ol>
<p>例如:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="comment">// 这是我写的一个有参数的构造方法(全参构造方法)</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Student</span></span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Student</span><span class="params">(String name ,<span class="keyword">int</span> age)</span></span>{</span><br><span class="line"> <span class="keyword">this</span>.name = name;</span><br><span class="line"> <span class="keyword">this</span>.age = age;</span><br><span class="line">}</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"><span class="comment">//这是我写的第二个构造方法(无参构造方法)</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="title">Student</span><span class="params">()</span></span>{</span><br><span class="line"> </span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"><span class="comment">//只要我写了第一个构造方法,那么默认的最简单的构造方法将不会自动生成了</span></span><br><span class="line"><span class="comment">//两个构造方法一个有参数,一个无参数,不印象,因为构造方法也可以重载</span></span><br></pre></td></tr></table></figure>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Student</span></span>{</span><br><span class="line"> <span class="keyword">public</span> Student{</span><br><span class="line"> system.out.println(<span class="string">"构造方法执行啦!"</span>)</span><br><span class="line"> <span class="comment">//这就是一个构造方法</span></span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<ul>
<li>构造方法的用途其实就是创建对象罢了</li>
</ul>
<blockquote>
<p> Student stu = <strong>new Studnet();</strong></p>
</blockquote>
<p>当我们在写这个的时候,其实就是一个构造方法。</p>
<h3 id="一个完整的例子理解构造方法的作用"><a href="#一个完整的例子理解构造方法的作用" class="headerlink" title="一个完整的例子理解构造方法的作用"></a>一个完整的例子理解构造方法的作用</h3><p>一个<strong>完整</strong>的类,其实应该如此:</p>
<ol>
<li><p>所有的成员变量都要使用private关键字来进行修饰</p>
</li>
<li><p>每一对成员变量都有一对Getter、Setter方法</p>
</li>
<li><p>编写一个无参的构造方法</p>
</li>
<li><p>编写一个有参的构造方法</p>
<p>这样的一个标准的类就叫做一个 Java Bean</p>
</li>
</ol>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Student</span></span>{</span><br><span class="line"> <span class="comment">//成员变量</span></span><br><span class="line"> <span class="keyword">private</span> String name;</span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">int</span> age;</span><br><span class="line"> </span><br><span class="line"> <span class="comment">//无参构造方法</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="title">Student</span><span class="params">()</span></span>{ <span class="comment">//方法名和类名一致,都是Student吧</span></span><br><span class="line"> Systent.out.println(<span class="string">"无参构造方法执行啦!"</span>);</span><br><span class="line"> }</span><br><span class="line"> <span class="comment">//有参构造方法</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="title">Student</span><span class="params">(String name,<span class="keyword">int</span> age)</span></span>{</span><br><span class="line"> System.out.println(<span class="string">"全参构造方法执行啦!"</span>);</span><br><span class="line"> <span class="keyword">this</span>.name = name;</span><br><span class="line"> <span class="keyword">this</span>.age = age;</span><br><span class="line"> <span class="comment">// 就是将默认的name和age 传递给最上头的成员变量</span></span><br><span class="line"> }</span><br><span class="line"> <span class="comment">//还要有getter setter方法</span></span><br><span class="line"> </span><br><span class="line"> <span class="function"><span class="keyword">public</span> String <span class="title">getName</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="keyword">return</span> name;</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">setName</span><span class="params">(String name)</span> </span>{</span><br><span class="line"> <span class="keyword">this</span>.name = name;</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">int</span> <span class="title">getAge</span><span class="params">()</span> </span>{</span><br><span class="line"> <span class="keyword">return</span> age;</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">setAge</span><span class="params">(<span class="keyword">int</span> age)</span> </span>{</span><br><span class="line"> <span class="keyword">this</span>.age = age;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<ul>
<li><p><strong>分别有什么用?</strong></p>
<ul>
<li><p>全参构造方法,就是给我们在构造一个新的学生对象的时候,可以直接的给他设置参数,设置这个学生的年龄啊名字。</p>
</li>
<li><p>那么getter 和setter 的方法就是没用的了吗?</p>
<p>并不,getter和 setter方法 是用来我们后续对这个学生进行属性的修改</p>
</li>
</ul>
</li>
<li><p><strong>所以有参数的构造方法的作用正是:</strong>方便我们在创建对象的时候数据的初始化,尤其是不变的数据,比如我们的名字,省去复杂的get 和set</p>
</li>
</ul>
]]></content>
<categories>
<category>Java Notes</category>
</categories>
<tags>
<tag>java</tag>
</tags>
</entry>
<entry>
<title>抽象</title>
<url>/2020/03/29/%E6%8A%BD%E8%B1%A1/</url>
<content><![CDATA[<h3 id="抽象"><a href="#抽象" class="headerlink" title="抽象"></a>抽象</h3><ul>
<li><p>如果父类方法中的方法不确定,如何进行{}方法体实现,那么这样的方法就是抽象方法</p>
<p><img src="C:%5CUsers%5CKOBE%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200326104719421.png" alt="image-20200326104719421"></p>
</li>
<li><p>抽象方法和抽象类的格式</p>
<blockquote>
<p>抽象方法: 就是加上abstract关键字,然后去掉大括号,直接分号结束。<br>抽象类: 抽象方法所在的类,必须是抽象类才行。在class之前写上abstract即可。</p>
</blockquote>
</li>
<li><p>如何使用抽象类和抽象方法:</p>
<ol>
<li><p>不能直接创建new抽象类对象。</p>
</li>
<li><p>必须用一个子类来继承抽象父类。</p>
</li>
<li><p>子类必须覆盖重写抽象父类当中<strong>所有的抽象方法</strong>。</p>
<p>覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体大括号。</p>
</li>
<li><p>创建子类对象进行使 用</p>
<a id="more"></a>
<p>抽象类animal:</p>
</li>
</ol>
</li>
</ul>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="class"><span class="keyword">class</span> <span class="title">Animal</span> </span>{</span><br><span class="line"> <span class="comment">//这是一个抽象方法,代表吃东西,但是具体吃什么(大括号的内容)不确定。</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">void</span> <span class="title">eat</span><span class="params">()</span></span>;</span><br><span class="line"> <span class="comment">//这是普通的成员方法</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">normalMethod</span><span class="params">()</span> </span>{</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Cat</span> <span class="keyword">extends</span> <span class="title">Animal</span> </span>{</span><br><span class="line"> <span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">eat</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . print1n( <span class="string">"猫吃鱼"</span>); <span class="comment">// 点2和点3</span></span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">DemoMain</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"><span class="comment">//Animal animal = new Animal(); //错误写法!不能直接创建抽象类对象 点1</span></span><br><span class="line">Cat cat = <span class="keyword">new</span> Cat(); <span class="comment">// 点4</span></span><br><span class="line">cat.eat();</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<ul>
<li><p>抽象方法和抽象类的注意事项</p>
<p>关于抽象类的使用,以下为语法上要注意的细节,虽然条目较多,但若理解了抽象的本质,无需死记硬背。</p>
<ol>
<li><p>抽象类<strong>不能创建对象</strong>,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。<br>理解: 假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。</p>
</li>
<li><p>抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。<br>理解: 子类的构造方法中,有默认的super(), 需要访问父类构造方法。</p>
<p>抽象父类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="class"><span class="keyword">class</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Fu</span><span class="params">()</span></span>{</span><br><span class="line"> System.out.println(“抽象父类构造方法执行! <span class="string">");</span></span><br><span class="line"><span class="string"> }</span></span><br><span class="line"><span class="string">public abstract void eat();</span></span><br><span class="line"><span class="string">}</span></span><br></pre></td></tr></table></figure>
<p>子类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Zi</span> <span class="keyword">extends</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Zi</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="comment">// super(); 编译器赠送给你的super(),因此有父类的抽象方法执行</span></span><br><span class="line">}</span><br><span class="line">System.out.println(<span class="string">"子类构造方法执行"</span>);</span><br><span class="line"> </span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">eat</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . println( <span class="string">"吃饭饭"</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>主类执行:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">DemoMain</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span></span>{</span><br><span class="line">Zi zi = <span class="keyword">new</span> Zi();</span><br><span class="line">zi.eat();</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>执行结果:</p>
<blockquote>
<p>抽象父类构造方法执行!<br>子类构造方法执行<br>吃饭饭</p>
<p>先执行父类的构造方法,再执行子类的。</p>
</blockquote>
</li>
</ol>
</li>
</ul>
<ol start="3">
<li><p>抽象类中,不一定包含抽象方法,但是<strong>有抽象方法的类必定是抽象类</strong>。<br>理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line">一个抽象类不一定含有抽象方法,</span><br><span class="line">只要保证抽象方法所在的类是抽象类,即可。</span><br><span class="line">这样没有抽象方法的抽象类,也不能直接创建对象,在一些特殊场景 下有用途。</span><br><span class="line"><span class="keyword">public</span> <span class="keyword">abstract</span> c1ass MyAbstract {</span><br></pre></td></tr></table></figure>
</li>
</ol>
<ol start="4">
<li><p>抽象类的子类,<strong>必须重写抽象父类中所有的抽象方法</strong>,否则,编译无法通过而报错。<strong>除非该子类也是抽象类</strong>。<br>理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="comment">//最高的抽象父类</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="class"><span class="keyword">class</span> <span class="title">Animal</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">void</span> <span class="title">eat</span><span class="params">()</span></span>;</span><br><span class="line"><span class="function">pub1ic <span class="keyword">abstract</span> <span class="keyword">void</span> <span class="title">sleep</span><span class="params">()</span></span>; <span class="comment">// 有两个抽象方法!!</span></span><br></pre></td></tr></table></figure>
<p>如果没有完全重写抽象父类中所有的抽象方法,该子类只能也是抽象类</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="comment">//子类也是一个抽象类(abstract)</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="class"><span class="keyword">class</span> <span class="title">Dog</span> <span class="keyword">extends</span> <span class="title">Animal</span> </span>{</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">eat</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . println( <span class="string">"狗吃骨头"</span>);</span><br><span class="line">}</span><br><span class="line"><span class="comment">// public abstract void sleep();</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>当然他的孙子辈的类可以重写之前的抽象方法</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">DogGolden</span> <span class="keyword">extends</span> <span class="title">Dog</span> </span>{</span><br><span class="line"><span class="meta">@Override</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">sleep</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . print1n( <span class="string">"呼呼.."</span>);</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>执行主类</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">DemoMain</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line"><span class="comment">//Animal animal = new Animal(); //错误!</span></span><br><span class="line"><span class="comment">//Dog dog=new Dog(); //错误,这也是抽象类</span></span><br><span class="line">Dog2Ha ha = <span class="keyword">new</span> Dog2Ha(); <span class="comment">//这是普通类,可以直接new对象。</span></span><br><span class="line">ha.eat();</span><br><span class="line">ha.sleep();</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>执行结果:</p>
<blockquote>
<p>狗吃骨头</p>
<p>呼呼. .</p>
</blockquote>
</li>
</ol>
<hr>
<ul>
<li>发红包实例运用抽象类</li>
</ul>
<blockquote>
<p>导图分析:</p>
<p><img src="C:%5CUsers%5CKOBE%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200327073444758.png" alt="image-20200327073444758"></p>
<p>代码分析:</p>
</blockquote>
<p>父类用户类:</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">User</span></span>{</span><br><span class="line"><span class="keyword">private</span> String name; <span class="comment">//姓名</span></span><br><span class="line"><span class="keyword">private</span> <span class="keyword">int</span> money; <span class="comment">//余额,也就是当前用户拥有的钱数</span></span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">User</span><span class="params">()</span> </span>{</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">User</span><span class="params">(String name, <span class="keyword">int</span> money)</span> </span>{</span><br><span class="line"><span class="keyword">this</span>.name = name;</span><br><span class="line"><span class="keyword">this</span> .money = money;</span><br><span class="line">}</span><br><span class="line"><span class="comment">//展示一下当前用户有多少钱</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">show</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . println(<span class="string">"我叫:”+ name + "</span>,我有多少钱:”+ money);</span><br><span class="line"><span class="function"><span class="keyword">public</span> String <span class="title">getName</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">return</span> name ;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">setName</span><span class="params">(String name)</span> </span>{</span><br><span class="line"><span class="keyword">this</span>.name = name;</span><br><span class="line">}</span><br><span class="line"><span class="function">pub1ic <span class="keyword">int</span> <span class="title">getMoney</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">return</span> money;</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">setMoney</span><span class="params">(String money)</span> </span>{</span><br><span class="line"><span class="keyword">this</span>.money = money; </span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>子类群主类</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> java. util.ArrayList;</span><br><span class="line"><span class="keyword">public</span> c1ass Manager extends User {</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Manager</span><span class="params">()</span> </span>{</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Manager</span><span class="params">(String name, <span class="keyword">int</span> money)</span> </span>{</span><br><span class="line"><span class="keyword">super</span>(name, money);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> ArrayList<Integer> <span class="title">send</span><span class="params">(<span class="keyword">int</span> totalMoney, <span class="keyword">int</span> count)</span> </span>{</span><br><span class="line"><span class="comment">//首先需要一个集合,用来存储若干个红包的金额</span></span><br><span class="line">ArrayList<Integer> redList = <span class="keyword">new</span> Arraylist<>();</span><br><span class="line"><span class="comment">//首先看- -下群主自己有多少钱</span></span><br><span class="line"><span class="keyword">int</span> leftMoney = <span class="keyword">super</span>.getMoney(); <span class="comment">//群主当前余额</span></span><br><span class="line"><span class="keyword">if</span> (totalMoney > leftMoney) {</span><br><span class="line">System.out.println(<span class="string">"余额不足"</span>);</span><br><span class="line"><span class="keyword">return</span> redList; <span class="comment">//返回空集合</span></span><br><span class="line">}</span><br><span class="line"><span class="comment">//扣钱,其实就是重新设置余额</span></span><br><span class="line"><span class="keyword">super</span>.setMoney(<span class="number">1</span>eftMoney - totalMoney);</span><br><span class="line"><span class="comment">//发红包需要平均拆分成为count份</span></span><br><span class="line"><span class="keyword">int</span> avg = totalMoney / count ;</span><br><span class="line"><span class="keyword">int</span> mod = totalMoney % count; <span class="comment">//余数,也就是甩下的零头</span></span><br><span class="line"><span class="comment">//除不开的零头,包在最后一个红包当中</span></span><br><span class="line"><span class="comment">//下面把红包一个一个放到集合当中</span></span><br><span class="line"><span class="keyword">for</span>(inti=<span class="number">0</span>;i<count-<span class="number">1</span>;i++){</span><br><span class="line">redList.add(avg);</span><br><span class="line">}</span><br><span class="line"><span class="comment">//最后一个红包</span></span><br><span class="line">intlast=avg+mod;</span><br><span class="line">redList.add(last);</span><br><span class="line"><span class="keyword">return</span> redList;</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>子类群员类</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> java.util.Arraylist;</span><br><span class="line"><span class="keyword">import</span> java.util.Random;</span><br><span class="line"><span class="comment">//昔通成员</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Member</span> <span class="keyword">extends</span> <span class="title">User</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Member</span><span class="params">()</span> </span>{</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Member</span><span class="params">(String name, <span class="keyword">int</span> money)</span> </span>{</span><br><span class="line"><span class="keyword">super</span>(name, money);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">receive</span><span class="params">(ArrayList<Integer> list)</span> </span>{</span><br><span class="line"><span class="comment">//从多个红包当中随便抽取一个,给我自己。</span></span><br><span class="line"><span class="comment">//随机获取一个集合当中的索引编号</span></span><br><span class="line"><span class="keyword">int</span> index = <span class="keyword">new</span> Random() . nextInt(list.size());</span><br><span class="line"><span class="comment">//根据索引,从集合当中删除,并且得到被删除的红包,给我自己</span></span><br><span class="line"><span class="keyword">int</span> delta = list. remove(index);</span><br><span class="line"><span class="comment">//当前成员自己本来有多少钱:</span></span><br><span class="line"><span class="keyword">int</span> money = <span class="keyword">super</span> . getMoney();</span><br><span class="line"><span class="comment">//加法,并且重新设置回去</span></span><br><span class="line"><span class="keyword">super</span>. setMoney(money + delta);</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>主类</p>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> java.util.ArrayList;</span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">MainRedPacket</span> </span>{</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</span><br><span class="line">Manager manager = <span class="keyword">new</span> Manager( name: <span class="string">"群主"</span>,money: <span class="number">100</span>);</span><br><span class="line">Member one = <span class="keyword">new</span> Member( name:<span class="string">"成员A"</span>,money: <span class="number">0</span>);</span><br><span class="line">Member two = <span class="keyword">new</span> Member( name: <span class="string">"成员B"</span>,money: <span class="number">0</span>);</span><br><span class="line">Member three = <span class="keyword">new</span> Member( name: <span class="string">"成员C"</span> , money: <span class="number">0</span>);</span><br><span class="line">manager . show(); <span class="comment">// 100</span></span><br><span class="line">one. show(); <span class="comment">//0</span></span><br><span class="line">two. show(); <span class="comment">//0</span></span><br><span class="line">three. show(); <span class="comment">//0</span></span><br><span class="line">System . out . print1n(<span class="string">"============="</span>);</span><br><span class="line"><span class="comment">//群主总共发20块钱,分成3个红包</span></span><br><span class="line">ArrayList<Integer> redList = manager. send( totalMoney: <span class="number">20</span>,count: <span class="number">3</span>) ;</span><br><span class="line"><span class="comment">//三个普通成员收红包</span></span><br><span class="line">one . receive(redList);</span><br><span class="line">two. receive(redList);</span><br><span class="line">three . receive(redList);</span><br><span class="line">manager . show(); <span class="comment">// 100- 20=80</span></span><br><span class="line"><span class="comment">//6、6、8,随机</span></span><br><span class="line">one. . show(); </span><br><span class="line">two. show( );</span><br><span class="line">three. show() ;</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
]]></content>
<categories>
<category>Java Notes</category>
</categories>
<tags>
<tag>java</tag>
</tags>
</entry>
<entry>
<title>super关键字和this关键字</title>
<url>/2020/03/29/super%E5%85%B3%E9%94%AE%E5%AD%97/</url>
<content><![CDATA[<h3 id="super关键字和this关键字"><a href="#super关键字和this关键字" class="headerlink" title="super关键字和this关键字"></a>super关键字和this关键字</h3><h4 id="super"><a href="#super" class="headerlink" title="super"></a>super</h4><ul>
<li><p>super关键字的三种用法</p>
<ul>
<li>在子类的成员方法中,访问父类的成员变量。</li>
<li>在子类的成员方法中,访问父类的成员方法。</li>
<li>在子类的构造方法中,访问父类的构造方法。</li>
</ul>
</li>
</ul>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="keyword">int</span> num = <span class="number">10</span>;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">()</span> </span>{</span><br><span class="line">System . out . println(<span class="string">"父类方法"</span>);</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<a id="more"></a>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Zi</span> <span class="keyword">extends</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="keyword">int</span> num = <span class="number">20</span>;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Zi</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">super</span>();</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodZi</span><span class="params">()</span> </span>{</span><br><span class="line">System. out . print1n(<span class="keyword">super</span>. num); <span class="comment">//父类中的num </span></span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">method</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">super</span> . method(); <span class="comment">//访问父类中的method</span></span><br><span class="line">System. out . print1n(<span class="string">"子类方法"</span>);</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<hr>
<h4 id="this"><a href="#this" class="headerlink" title="this"></a>this</h4><ul>
<li><p>super关键字用来访问父类内容, 而this关键字用来访问本类内容。用法也有3三种:</p>
<ul>
<li><p>在本类的成员方法中,访问本类的成员变量。</p>
</li>
<li><p>在本类的成员方法中,访问本类的另一个成员方法。</p>
</li>
<li><p>在本类的构造方法中,访问本类的另一个构造方法。</p>
<p>在第三种用法当中要注意:</p>
<ul>
<li><p><code>this(... )</code>调用也必须是构造方法的第一 个语句,唯一一个。</p>
</li>
<li><p><code>super</code>和<code>this</code>两种构造调用,不能同时使用。</p>
<p>(因为他们都必须放在第一排只能唯一)</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<figure class="highlight java"><table><tr><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Zi</span> <span class="keyword">extends</span> <span class="title">Fu</span> </span>{</span><br><span class="line"><span class="keyword">int</span> num = <span class="number">20</span>;</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Zi</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="comment">//super(); //这一行不再赠送 (注意的第二点)</span></span><br><span class="line"><span class="keyword">this</span>( n: <span class="number">123</span>); <span class="comment">//本类的无参构造,调用本类的有参构造</span></span><br><span class="line"><span class="keyword">this</span>(<span class="number">1</span>,<span class="number">2</span>); <span class="comment">//错误写法! (注意的第一点)</span></span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Zi</span><span class="params">(<span class="keyword">int</span> n)</span> </span>{</span><br><span class="line"><span class="keyword">this</span>( n: <span class="number">1</span>,m: <span class="number">2</span>);</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="title">Zi</span><span class="params">(<span class="keyword">int</span> n, <span class="keyword">int</span> m)</span> </span>{</span><br><span class="line">}</span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">showNum</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">int</span> num = <span class="number">10</span>;</span><br><span class="line">System.out.print1n(num); <span class="comment">//局部变量</span></span><br><span class="line">System.out. println(<span class="keyword">this</span>.num); <span class="comment">//本类中的成员变量 (用法1)</span></span><br><span class="line">System.out.println(<span class="keyword">super</span>.num); <span class="comment">//父类中的成员变量</span></span><br><span class="line"> </span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodA</span><span class="params">()</span> </span>{</span><br><span class="line">System. out. println(<span class="string">"AAA"</span>);</span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">methodB</span><span class="params">()</span> </span>{</span><br><span class="line"><span class="keyword">this</span> .methodA(); <span class="comment">//(用法2)</span></span><br><span class="line">System. out . println(<span class="string">"BBB"</span>);</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<hr>
<h4 id="super-和-this-的内存图解"><a href="#super-和-this-的内存图解" class="headerlink" title="super 和 this 的内存图解"></a>super 和 this 的内存图解</h4><p><img src="C:%5CUsers%5CKOBE%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200326100526829.png" alt="image-20200326100526829"></p>
]]></content>
<categories>
<category>Java Notes</category>
</categories>
<tags>