首页 > 编程语言 > 详细

第2课第4节_Java面向对象编程_多态性_P【学习笔记】

时间:2019-05-22 00:30:48      阅读:127      评论:0      收藏:0      [点我收藏+]

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

面向对象程序的三大特性之继承性:

1、向上转换:只能定义被子类覆写的方法,不能调用在子类中定义的方法。

 1 class Father {
 2     private int money;    
 3 
 4     public int getMoney() {return money; }
 5     public void setMoney(int money) {this.money = money; }
 6 
 7     public void printInfo() {System.out.println("This is Father");}
 8 }
 9 
10 class Son extends Father{
11     public void printInfo() {System.out.println("This is son");}
12     public void playGame(){System.out.println("This is son");}
13 }
14 
15 class Daughter extends Father{
16     public void printInfo() {System.out.println("This is Father");}
17 }
18 
19 
20 public class Cnv {
21     public static void main (String args[]) {
22         Son son = new Son();
23         Daughter daughter = new Daughter();
24 
25         Father f = son;
26         f.printInfo();
27         //f.playGame();
28 
29         f = daughter;
30         f.printInfo();
31     }
32 }

编译运行:

技术分享图片

2、JAVA向下转换的例子,在进行对象的向下转换前,必须首先发生对象的向上转换.否则会编译不过.

 1 class Father {
 2     private int money;    
 3 
 4     public int getMoney() {return money; }
 5     public void setMoney(int money) {this.money = money; }
 6 
 7     public void printInfo() {System.out.println("This is Father");}
 8 }
 9 
10 class Son extends Father{
11     public void printInfo() {System.out.println("This is son");}
12     public void playGame(){System.out.println("This is son");}
13 }
14 
15 class Daughter extends Father{
16     public void printInfo() {System.out.println("This is Father");}
17 }
18 
19 
20 public class Cnv2 {
21     public static void main (String args[]) {
22         Father f = new Son();
23         Son son = (Son)f;
24     }
25 }

3、看一下,下面的例子,假如有一千个类继承了father这个类,如果我们要打印他们的信息,那样我们岂不是要写1千个print函数,下面的第二个代码则通过向上转换这个技巧实现.

 1 class Father {
 2     private int money;    
 3 
 4     public int getMoney() {return money; }
 5     public void setMoney(int money) {this.money = money; }
 6 
 7     public void printInfo() {System.out.println("This is Father");}
 8 }
 9 
10 class Son extends Father{
11     public void printInfo() {System.out.println("This is son");}
12     public void playGame(){System.out.println("This is son");}
13 }
14 
15 class Daughter extends Father{
16     public void printInfo() {System.out.println("This is Dauhter");}
17 }
18 
19 
20 public class Cnv3 {
21     public static void main (String args[]) {
22         Father f = new Father();
23         Son s = new Son();
24         Daughter d = new Daughter();
25 
26         print(f);
27         print(s);
28         print(d);
29     }
30 
31     public static void print(Father f){
32         f.printInfo();
33     }
34 
35     
36     public static void print(Son s){
37             s.printInfo();
38     }
39 
40     public static void print(Daughter d){
41             d.printInfo();
42     }
43 
44 
45     
46 }

通过向上转换实现:

 

 1 class Father {
 2     private int money;    
 3 
 4     public int getMoney() {return money; }
 5     public void setMoney(int money) {this.money = money; }
 6 
 7     public void printInfo() {System.out.println("This is Father");}
 8 }
 9 
10 class Son extends Father{
11     public void printInfo() {System.out.println("This is son");}
12     public void playGame(){System.out.println("This is son");}
13 }
14 
15 class Daughter extends Father{
16     public void printInfo() {System.out.println("This is Dauhter");}
17 }
18 
19 
20 public class Cnv4 {
21     public static void main (String args[]) {
22         Father f = new Father();
23         Son s = new Son();
24         Daughter d = new Daughter();
25 
26         print(f);
27         print(s);
28         print(d);
29     }
30     
31 
32     public static void print(Father f){
33         f.printInfo();
34     }
35 }

 

上述两份代码编译运行结果一样:

技术分享图片

4、instanceof: 用来判断一个对象是不是某个类的实例

 1 class Father {
 2     private int money;    
 3 
 4     public int getMoney() {return money; }
 5     public void setMoney(int money) {this.money = money; }
 6 
 7     public void printInfo() {System.out.println("This is Father");}
 8     public void drink(){System.out.println("drink");}
 9 }
10 
11 class Son extends Father{
12     public void printInfo() {System.out.println("This is son");}
13     public void playGame(){System.out.println("playGame");}
14 }
15 
16 class Daughter extends Father{
17     public void printInfo() {System.out.println("This is Dauhter");}
18     public void dance(){System.out.println("dance");}
19 }
20 
21 
22 public class Cnv5{
23     public static void main (String args[]) {
24         Father f = new Father();
25         Son s = new Son();
26         Daughter d = new Daughter();
27 
28         printAction(f);
29         printAction(s);
30         printAction(d);
31     }
32     
33 
34     public static void printAction(Father f){
35         if (f instanceof Son){
36             Son s = (Son)f;
37             s.playGame();
38         }else if (f instanceof Daughter){
39             Daughter d = (Daughter)f;
40             d.dance();
41         }else if(f instanceof Father){
42             f.drink();
43         }
44     }
45 }

编译运行结果:

技术分享图片

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

  技术分享图片

 

第2课第4节_Java面向对象编程_多态性_P【学习笔记】

原文:https://www.cnblogs.com/zzb-Dream-90Time/p/10903305.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!