java向上转型
来源:互联网 发布:ubuntu 14.04 麒麟 编辑:程序博客网 时间:2024/05/04 21:17
java向上转型
首先来了解一下下面的知识点:
1,转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展。
2,“动态绑定”也即后期绑定,意指在运行期间判断对象的类型并以此来判定去调用适当的方法。java属于后期绑定。在java中,几乎所有的方法都是后期绑定的,在运行时去动态的绑定一个方法是属于子类还是属于基类。
向上转型:子类引用的对象转换为父类类型称为向上转型,或者说把子类对象直接赋给父类引用。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口.
Father father = new Son(); //向上转型,父类引用指向子类对象
看下面的代码段1:
public class Father{
public void f1() {
System.out.println("Father 的 method");
}
}
Father的子类Son:
public class Son extends Father {
public void f1() {
System.out.println("Son 的 method"); //覆盖父类的方法@override
}
public void s1(){} //Son类定义了自己的新方法
public static void main(String[] args) {
Father a = new Son();//向上转型
a.fl();
}
}
那么上面程序的运行结果会是什么呢?输出的是“Father 的 method”还是“Son 的 method”?事实上输出的结果是:Son 的 method 。分析一下,首先Father a = new Son();声明的是父类的引用,但是执行的过程中调用的是子类的对象,所以程序首先寻找子类对象的f1方法,由于子类重写了父类的f1方法,根据“动态绑定”的理论知道程序会去调用子类的f1方法去执行,因为子类对象有f1方法而没有向上转型去寻找。那么我们再接着看下面的一段代码段2:
public class Father{
public void f1() {
System.out.println("Father 的 method");
}
}
Father的子类Son:
public class Son extends Father {
public void s1(){} //Son类定义的方法
public static void main(String[] args) {
Father a = new Son();//向上转型
a.fl();
}
}
这时Father a = new Son();声明的仍然是父类的引用,执行过程中调用的也仍然是子类的对象,程序首先会去寻找子类对象的f1方法,但是没有找到,于是就会向上转型去父类寻找f1方法,这时会顺利的找到,将会给出的结果是:Father 的 method。
这里我们需要注意,在向上转型时,父类指向子类引用对象会遗失除与父类对象共有的其他方法,也就是在转型过程中,子类的新有的方法都会遗失掉,在编译时,系统会提供找不到方法的错误
但是,值得注意的是在处理java类中的成员变量时,并不是采用运行时绑定,而是一般意义上的静态绑定。所以在向上转型的情况下,对象的方法可以找到子类,而对象的属性还是父类的属性。
- 【Java】向上转型 向下转型
- Java 向上转型,向下转型
- java 向上转型向下转型
- Java向上转型
- Java向上转型小议
- java向上转型
- java -多态--向上转型
- java向上转型
- Java的向上转型
- Java中向上转型
- java向上转型
- java向上转型
- Java向上转型
- Java向上转型理解
- java向上转型
- java 向上转型
- java向上转型实例
- java向上转型妙用
- 配置 android 开发环境 + HelloWorld
- 设计模式小结
- redis主从同步
- 产品的误区一:过渡追求细节、UI设计
- 正确设定背景图片 ios
- java向上转型
- NDK联机调试
- DOTween 使用方法
- DHCP和DHCP中继
- OC-7-开发技巧
- 深入浅出 Java Concurrency (32): 线程池 part 5 周期性任务调度
- hdoj3068--最长回文(manacher模板)
- tomcat安装运行大问题
- IOS中委托代理(degegate)的理解和使用示例