【Java笔记】在强制转换中理解动态绑定
来源:互联网 发布:淘宝欢乐逛如何使用 编辑:程序博客网 时间:2024/06/04 18:44
package Test04;
public class Test04 {
public static void main(String[] args) {
Animal aa= new Dog();
aa.eat();//此时aa实际上是一个Dog对象,当通过aa调一个子类和父类都有的方法的时候,Java会先看父类中有没有这个方法,如果有,就再去子类看有没有重写这个方法,如果重写了,那实际调用的会是子类的方法
aa.run();//这样调用是非法的,因为声明的时候是声明的一个Animal类,虽然我们知道实际上是一个Dog对象,但它的类还是Animal
//我们可以通过强制转换来实现把类为Animal的Dog对象转为Dog类
Dog bb=(Dog)aa;
bb.run();//这样再调用是合法的
Animal cc=new Animal();
Dog dd=(Dog)cc; //编译时不报错的,但是运行会出错,因为cc实际上是一个Animal对象,不能转为Dog类,运行结果:I am a dog,so i eat meat
// I can run
// Exception in thread "main" java.lang.ClassCastException: Test04.Animal cannot be cast to Test04.Dog
// at Test04.Test04.main(Test04.java:16)
public static void main(String[] args) {
Animal aa= new Dog();
aa.eat();//此时aa实际上是一个Dog对象,当通过aa调一个子类和父类都有的方法的时候,Java会先看父类中有没有这个方法,如果有,就再去子类看有没有重写这个方法,如果重写了,那实际调用的会是子类的方法
aa.run();//这样调用是非法的,因为声明的时候是声明的一个Animal类,虽然我们知道实际上是一个Dog对象,但它的类还是Animal
//我们可以通过强制转换来实现把类为Animal的Dog对象转为Dog类
Dog bb=(Dog)aa;
bb.run();//这样再调用是合法的
Animal cc=new Animal();
Dog dd=(Dog)cc; //编译时不报错的,但是运行会出错,因为cc实际上是一个Animal对象,不能转为Dog类,运行结果:I am a dog,so i eat meat
// I can run
// Exception in thread "main" java.lang.ClassCastException: Test04.Animal cannot be cast to Test04.Dog
// at Test04.Test04.main(Test04.java:16)
dd.run();
Dog ee=new Dog();
Animal ff=(Animal)ee;//其实这个地方的是没必要写这个Animal,来进行自动转换的,因为子类转换为父类是自动转换,这一行代码也可以写成Animal ff=ee;
ff.eat(); //合法
}
}
class Animal{
void eat(){
System.out.println("I eat food");
};
}
class Dog extends Animal{
//重写eat()
void eat(){
System.out.println("I am a dog,so i eat meat");
}
//写一个Dog类独有的方法
void run(){
System.out.println("I can run");
}
}
Dog ee=new Dog();
Animal ff=(Animal)ee;//其实这个地方的是没必要写这个Animal,来进行自动转换的,因为子类转换为父类是自动转换,这一行代码也可以写成Animal ff=ee;
ff.eat(); //合法
}
}
class Animal{
void eat(){
System.out.println("I eat food");
};
}
class Dog extends Animal{
//重写eat()
void eat(){
System.out.println("I am a dog,so i eat meat");
}
//写一个Dog类独有的方法
void run(){
System.out.println("I can run");
}
}
阅读全文
0 0
- 【Java笔记】在强制转换中理解动态绑定
- 【Java笔记】动态绑定
- java深入理解动态绑定
- 理解java静态绑定和动态绑定
- java中强制类型转换
- Java学习笔记之深入理解动态绑定和静态绑定
- 浅谈JAVA中静态绑定和动态绑定(源自《深入理解Java虚拟机》)
- [Java学习笔记] Java中的强制转换
- 自动、强制类型转换 | 变量作用域 | java初学笔记 新手理解
- Java动态绑定机制--笔记
- Java类型强制转换小笔记
- JAVA学习笔记(强制类型转换)
- java中动态绑定与静态绑定
- java中动态绑定与静态绑定
- java中数据类型间的强制转换
- Java中对象类型的强制转换
- Java中对象类型的强制转换
- Java 中 float 强制转换为 int
- 分享一些ssm(springmvc+spring+mybatis)集成的demo
- C#中volatile的用法
- SQLI Labs 第四课(判断是否存在注入以及注入攻击)
- viewPager嵌套fragment的数据刷新
- 重载New和Delete检测内存泄漏
- 【Java笔记】在强制转换中理解动态绑定
- 除法取模和逆元
- 树莓派玩转3g模块
- JavaScript 的函数柯里化
- 手风琴下拉列表
- 1000 A+B
- 信号的表示和处理
- codeforces—— 758A —— oliday Of Equality
- 【Redis深入】配置文件详解