- 多态变量和向上造型
- 多态变量
- 子类和子类型
- 类定义了类型
- 子类定义了子类型
- 子类的对象可以被当作父类的对象来使用
- 赋值给父类的变量
- 传递给需要父类对象的函数
- 放进存放父类对象的容器里
- 多态变量
- Java的对象变量是多态的,它们能保存不止一种类型的对象
- 它们可以保存的是声明类型的对象,或声明类型的子类的对象
- 当把子类的对象赋给父类的变量的时候,就发生了向上造型
- 子类和子类型
- 向上造型
- 子类的对象可以赋值给父类的变量
- 注意,只是管理者发生了变化
- 父类的对象不能赋值给子类的变量
- Vechicle v = new Vechicle();
- Car c = new Car();
- v = c;//可以
- c = v 错误
- 可以用造型
- c = (Car) v ;
- (只有当v这个变量实际管理的是Car才行)
- 造型
- 用括号围起类型放在值的前面
- 对象本身并没有发生任何变化
- 所以不是“类型转换”
- 运行时有机制
- 子类的对象可以赋值给父类的变量
- 多态变量
- 类型系统
- Object类
- 图片
- toString函数
-
1 public String toString() 2 { 3 return "CD [artist=" + artist + ", numofTracks=" + numofTracks + ", toString()=" + super.toString() + "]"; 4 }
-
- equals函数
-
1 public boolean equals(Object obj) 2 { 3 // TODO Auto-generated method stub 4 CD c = (CD)obj; 5 return artist.equals(c.artist); 6 }
-
- 增加新的子类
- 可扩展性
- 不需要修改就可以直接去适应新的情况
- 可维护性
- 经过修改可以去适应新的情况
-
1 package com.dome; 2 3 public class MP3 extends Iterm 4 { 5 6 private String artist; 7 8 public MP3(String title, int playingTime, boolean gotIt, String comment,String artist) 9 { 10 super(title, playingTime, gotIt, comment); 11 // TODO Auto-generated constructor stub 12 this.artist=artist; 13 } 14 15 16 17 @Override 18 protected void print() 19 { 20 // TODO Auto-generated method stub 21 System.out.print("MP3:"); 22 super.print(); 23 System.out.println(":"+artist); 24 } 25 26 27 28 public static void main(String[] args) 29 { 30 // TODO Auto-generated method stub 31 32 } 33 34 }
- 可扩展性
- Object类