标签:bsp lan 自己的 之间 参数类型 demo inf fun 建立
1、多态性严格来讲有两种描述形式:。
|- 方法的重载:同一个方法名称,会根据传入参数的类型及个数不同执行不同的方法。
|- 方法的覆写:同一个方法,会根据子类的不同,实现不同的功能。
|- 向上转型(自动完成):父类 父类对象=子类实例;。
|- 向下转型(强制完成):子类 子类对象=(子类)父类实例;。
2、向上转型
class A{ int age =10; public void fun(){ print(); } public void print(){ System.out.println("A"); } } class B extends A{ int age = 100; public void print(){ System.out.println(this.age); System.out.println(super.age); } } public class ExtendsDemo1 { public static void main(String[] args) { A a = new B(); a.print(); } }
运行结果:
100 10
3、向下转型
public class ExtendsDemo1 { public static void main(String[] args) { A a = new B(); B b = (B) a; //向下转型 b.print(); } }
运行结果:
100 10
向上转型的意义是参数的统一。
参数统一后,可以调用子类覆写的方法。
向下转型指的是父类调用子类自己的特殊方法。
对于数据的操作分为两步,(1)设置数据(保存数据),需要向上转型统一数据类型。(2)取出数据。
对于对象的转型,给出以下的经验总结:
●80%的情况下都只会使用向上转型,因为可以得到参数类型的统一。
5%的情况下会使用向下转型,目的是调用子类的特殊方法;。
●15%的情况下是不转型,例如: String。
个性化的操作在-一个标准的开发之中应该尽量少出现,因为对象的转型操作里面存在安全隐患。
4、观察如下代码:
class A{ public void print(){ System.out.println("A"); } } class B extends A{ public void print(){ System.out.println("B"); } } public class ExtendsDemo1 { public static void main(String[] args) { A a = new A(); B b = (B) a; b.print(); } }
运行报错:
Exception in thread "main" java.lang.ClassCastException: com.hengqin.test1.A cannot be cast to com.hengqin.test1.B
at com.hengqin.test1.ExtendsDemo1.main(ExtendsDemo1.java:17)
类转换异常,两个没有关系的类强行发生了向下转型。
学习instanceof 关键字
class A{ public void print(){ System.out.println("A"); } } class B extends A{ public void print(){ System.out.println("B"); } } public class ExtendsDemo1 { public static void main(String[] args) { A a1 = new A(); System.out.println(a1 instanceof A); System.out.println(a1 instanceof B); A a = new B(); System.out.println(a instanceof A); System.out.println(a instanceof B); if (a instanceof B){//如果a对象是B类的实例 B b = (B) a; b.print(); } } }
运行结果:
true false true true B
对于向下转型,一定要先发生向上转型,建立关系后才能发生。
标签:bsp lan 自己的 之间 参数类型 demo inf fun 建立
原文地址:https://www.cnblogs.com/cathycheng/p/13158974.html