浅读java编程思想之多态
8.1向上转型:父类对象通过子类对象去实例化,向上转型是不需要进行强制转换的,但是向上转型会丢失精度。
测试一:每个类的实例都经由ride()方法向上转型为Bike
1 public class Test { 2 public static void ride(Cycle c) { 3 } 4 5 public static void main(String[] args) { 6 ride(new Cycle()); 7 ride(new Unicycle()); 8 ride(new Bicycle()); 9 ride(new Tricycle()); 10 } 11 } 12 class Cycle { 13 14 15 } 16 class Unicycle extends Cycle { 17 18 } 19 20 class Bicycle extends Cycle { 21 } 22 23 class Tricycle extends Cycle { 24 }
测试二:验证多态对方法的有作用
public class Test { public static void ride(Cycle c) { System.out.println("Num. of wheels: " + c.wheels()); } public static void main(String[] args) { ride(new Cycle()); ride(new Unicycle()); ride(new Bicycle()); ride(new Tricycle()); } } class Cycle { public int wheels(){ return 0; } } class Unicycle extends Cycle { public int wheels(){ return 1; } } class Bicycle extends Cycle { public int wheels(){ return 2; } } class Tricycle extends Cycle { public int wheels(){ return 3; } } 输出: Num. of wheels: 0 Num. of wheels: 1 Num. of wheels: 2 Num. of wheels: 3
测试三
class Person { public void talk(){ System.out.println("我是人,在说话"); } } class Children extends Person{ public void talk(){ System.out.println("我是小孩,在说话"); } public static void main(String[] args) { Person p=new Children(); p.talk(); } } 输出结果 我是小孩,在说话
向下转型 (父类的对象可以转换为子类的对象,但是必须进行强制类型转换)
class Person { public void talk(){ System.out.println("我是人,在说话"); } } class Children extends Person{ public void talk(){ System.out.println("我是小孩,在说话"); } public void talk2(){ System.out.println("我是第二个小孩,在说话"); } public static void main(String[] args) { Person p=new Children(); //将p对象向下转型 Children c=(Children)p; p.talk(); } }

浙公网安备 33010602011771号