您的位置:首页 > 编程语言 > Java开发

Java 基础(8)—— 向上转型、向下转型、动态绑定、静态绑定

2017-10-09 17:29 337 查看

向上转型与向下转型







public class Test {
public static void main(String[] args) {

System.out.println("------向上转型测试------");
/* 花木兰替父从军
*
*/
Animal am = new Cat();
am.eat();
am.sleep();
am.run();

// 【只能调用】子类重写的父类方法/属性,以及父类派生的方法
// 【无法调用】子类独有的方法或属性
// The method catchMouse() is undefined for the type Animal
// am.catchMouse();

// name cannot be resolved or is not a field
// System.out.println(am.name);

System.out.println(am.num);
System.out.println(am.age);

System.out.println("====================================");

System.out.println("------向下转型测试------");
/* 花木兰变回了她自己
*
*/
Cat my_cat = (Cat)am;
my_cat.eat();
my_cat.sleep();
my_cat.catchMouse();

System.out.println(my_cat.num);
System.out.println(my_cat.age);
System.out.println(my_cat.name);

}
}

class Animal {
int num = 10;
static int age = 20;

public void eat() {
System.out.println("动物吃饭");
}

public static void sleep() {
System.out.println("动物在睡觉");
}

public void run() {
System.out.println("动物在奔跑");
}

}

class Cat extends Animal {
int num = 80;
static int age = 90;
String name = "tomCat";

public void eat() {
System.out.println("猫吃饭");
}

public static void sleep() {
System.out.println("猫在睡觉");
}

public void catchMouse() {
System.out.println("猫在抓老鼠");
}

}


------向上转型测试------
猫吃饭
动物在睡觉
动物在奔跑
10
20
====================================
------向下转型测试------
猫吃饭
猫在睡觉
猫在抓老鼠
80
90
tomCat


用通俗的例子说明 向上转型 与 向下转型

作者:程序狗

链接:https://www.zhihu.com/question/30082151/answer/120520568

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

花木兰替父从军大家都知道花木兰替父从军的例子,花木兰替父亲花弧从军。那么这时候花木兰是子类,花弧是父类。花弧有自己的成员属性年龄,姓名,性别。花木兰也有这些属性,但是很明显二者的属性完全不一样。花弧有自己的非静态成员方法‘骑马杀敌’,同样花木兰也遗传了父亲一样的方法‘骑马杀敌’。花弧还有一个静态方法‘自我介绍’,每个人都可以问花弧姓甚名谁。同时花木兰还有一个自己特有的非静态成员方法‘涂脂抹粉’。但是,现在花木兰替父从军,女扮男装。这时候相当于父类的引用(花弧这个名字)指向了子类对象(花木兰这个人),那么在其他类(其他的人)中访问子类对象(花木兰这个人)的成员属性(姓名,年龄,性别)时,其实看到的都是花木兰她父亲的名字(花弧)、年龄(60岁)、性别(男)。当访问子类对象(花木兰这个人)的非静态成员方法(骑马打仗)时,其实都是看到花木兰自己运用十八般武艺在骑马打仗。当访问花木兰的静态方法时(自我介绍),花木兰自己都是用她父亲的名字信息在向别人作自我介绍。并且这时候花木兰不能使用自己特有的成员方法‘涂脂抹粉’。—–多态中的向上转型

那么终于一将功成万骨枯,打仗旗开得胜了,花木兰告别了战争生活。有一天,遇到了自己心爱的男人,这时候爱情的力量将父类对象的引用(花弧这个名字)强制转换为子类对象本来的引用(花木兰这个名字),那么花木兰又从新成为了她自己,这时候她完全是她自己了。名字是花木兰,年龄是28,性别是女,打仗依然那样生猛女汉子,自我介绍则堂堂正正地告诉别人我叫花木兰。OMG!终于,终于可以使用自己特有的成员方法‘涂脂抹粉’了。从此,花木兰完全回到了替父从军前的那个花木兰了。并且和自己心爱的男人幸福的过完了一生。—–多态中的向下转型

静态绑定



动态绑定

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: