Happiness is more than pleasure without pain

你只有非常努力,才能看起来毫不费力

导航

< 2025年2月 >
26 27 28 29 30 31 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 1
2 3 4 5 6 7 8

统计

理解多态

//为什么要上转型

//Note.java

package c07;

public enum  Note{middleC,cSharp,cFlat;}

 

 

//Music.java

package c07;

class Instrument {
public void play(Note n) {
System.out.println("Instrument.play()");
}
}


class Wind extends Instrument {
public void play(Note n) {
System.out.println("Wind.play()       "+n);
}
}


class Wind2 extends Instrument {
public void play(Note n) {
System.out.println("Wind2.play()      "+n);
}
}


public class Music {
public static void tune(Instrument i) {
// ...
i.play(Note.middleC);//关键是这里 i    play  
}
public static void main(String[] args) {
Wind flute = new Wind();
tune(flute); // Upcasting
Wind2 flute2 = new Wind2();
tune(flute2); // Upcasting
}
} ///:~

 

//不用上转型,很麻烦


//: Music2.java
//Overloading instead of upcasting
class Note2 {
 private int value;
 private Note2(int val) { value = val; }
 public static final Note2
 middleC = new Note2(0),
 cSharp = new Note2(1),
 cFlat = new Note2(2);
} // Etc.
class Instrument2 {
 public void play(Note2 n) {
  System.out.println("Instrument2.play()");
 }
}
class Wind2 extends Instrument2 {
 public void play(Note2 n) {
  System.out.println("Wind2.play()");
 }
}
class Stringed2 extends Instrument2 {
 public void play(Note2 n) {
  System.out.println("Stringed2.play()");
 }
}
class Brass2 extends Instrument2 {
 public void play(Note2 n) {
  System.out.println("Brass2.play()");
 }
}
public class Music2 {
 public static void tune(Wind2 i) {
  i.play(Note2.middleC);
 }
 public static void tune(Stringed2 i) {
  i.play(Note2.middleC);
 }
 public static void tune(Brass2 i) {
  i.play(Note2.middleC);
 }//相对于上转型是多余的

 public static void main(String[] args) {
  Wind2 flute = new Wind2();
  Stringed2 violin = new Stringed2();
  Brass2 frenchHorn = new Brass2();
  tune(flute); // No upcasting
  tune(violin);
  tune(frenchHorn);
 }
} ///:~

posted on   believer  阅读(127)  评论(0编辑  收藏  举报

编辑推荐:
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
阅读排行:
· 手把手教你更优雅的享受 DeepSeek
· AI工具推荐:领先的开源 AI 代码助手——Continue
· 探秘Transformer系列之(2)---总体架构
· V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库
· 乌龟冬眠箱湿度监控系统和AI辅助建议功能的实现
点击右上角即可分享
微信分享提示