展示多態現象
1
2
3
4
5
6
7
|
package test; //父類引用,指向(不同子類)的實例,對同一個實例方法名調用,調用的程序不 //一樣。繼承是多態得以實現的基礎。 public interface test1 { void shout(); } |
1
2
3
4
5
6
7
|
package test; public class test2 implements test1 { public void shout() { System.out.println( "1111" ); } } |
1
2
3
4
5
6
7
|
package test; public class test3 implements test1 { public void shout() { System.out.println( "222222" ); } } |
1
2
3
4
5
6
7
8
9
10
11
12
|
package test; public class test4 { public static void main(String[] args) { test1 ts = new test2(); ts.shout(); test1 ts1 = new test3(); ts1.shout(); } } |
多態的基礎以及限制
1
2
3
4
5
6
7
8
9
|
package test; public class test5 { public static void speak() { System.out.println( "speak:" ); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package test; public class test6 extends test5{ public static void speak() { System.out.println( "11111" ); } //多態的基礎是繼承和重寫 //多態僅限于實例方法 public static void main(String[] args) { test5 ts1 = new test5(); test6 ts = new test6(); ts1.speak(); ts.speak(); } } |
對象類型轉換
1
2
3
4
5
6
7
|
package test; public class test7 { public void speak(){ System.out.println( "speak:" ); } } |
1
2
3
4
5
6
7
8
|
package test; public class test8 extends test7{ @Override public void speak() { System.out.println( "1111" ); } } |
1
2
3
4
5
6
7
8
9
10
11
12
|
package test; public class test9 extends test7 { @Override public void speak() { System.out.println( "22222" ); } protected void action() { System.out.println( "敲代碼" ); } } |
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
|
package test; public class test10 { public static void main(String[] args) { //向上類型轉換 隱式 安全 //將test8的對象當作test7類型來用 test7 ts = new test8(); ts.speak(); //強制類型轉換 顯示 不安全 test7 ts1 = new test9(); test9 ts2 = (test9) ts1; ts2.speak(); //怎么避免強制類型轉換帶來的不安全 面向接口編程加instanceof test7 ts3 = new test8(); test7 ts4 = null ; if (ts3 instanceof test9) { ts4 = (test9) ts3; } if (ts3 instanceof test8) { ts4 = (test8) ts3; } ts4.speak(); } } |
object類
Object類的常用方法也可以被重寫
1
2
3
4
5
6
7
8
|
package test; public class test11 { public void speak(){ System.out.println( "speak:" ); } } |
1
2
3
4
5
6
7
8
9
10
11
12
|
package test; public class test12 { public static void main(String[] args) { test11 ts = new test11(); ts.speak(); //返回該對象的字符串表示 System.out.println(ts.toString()); //返回該對象的哈希碼值 System.out.println(ts.hashCode()); } } |
匿名內部類
1
2
3
4
5
|
package test; public interface test13 { void speak(); } |
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
|
package test; public class test14 { //類里面定義的類稱之為內部類(Inner Class),內部類是外部類的一個成員。 //Java內部類可以分為:成員內部類、方法內部類和匿名內部類等。 class person implements test13{ @Override public void speak() { System.out.println( "111111" ); } } public static void main(String[] args) { class person1 implements test13{ @Override public void speak() { System.out.println( "2222222222" ); } } // 可以使用匿名內部類來實現接口。所謂匿名內部類就是沒有名字的內部類,表面上看 // 起來它似乎有名字,實際那不是它的名字。當程序中使用匿名內部類時,在定義匿名 // 內部類的地方往往直接創建該類的一個對象。 new test13(){ @Override public void speak() { System.out.println( "3333333" ); } }.speak(); } } |
到此這篇關于java多態注意項總結的文章就介紹到這了,更多相關java多態內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/weixin_44692890/article/details/120782329