Account是父类 CreditAccount是子类 setCeiling()方法是子类的方法
问题是:加粗的部分 为什么一定要向下转型 然后再去调用setCeiling()方法 直接这么写有什么不好CreditAccount creditAccount = new CreditAccount();
public Account changeCeiling(long id, double ceiling){
Account account = findAccountById(id);
if(account != null){
if(account instanceof CreditAccount){
CreditAccount creditAccount = (CreditAccount)account;
creditAccount.setCeiling(ceiling);
}else{
System.out.println("该用户是储蓄用户,不能设置透支额度1");
}
}else{
System.out.println("该用户不存在!");
}
return account;
}
问题是:加粗的部分 为什么一定要向下转型 然后再去调用setCeiling()方法 直接这么写有什么不好CreditAccount creditAccount = new CreditAccount();
public Account changeCeiling(long id, double ceiling){
Account account = findAccountById(id);
if(account != null){
if(account instanceof CreditAccount){
CreditAccount creditAccount = (CreditAccount)account;
creditAccount.setCeiling(ceiling);
}else{
System.out.println("该用户是储蓄用户,不能设置透支额度1");
}
}else{
System.out.println("该用户不存在!");
}
return account;
}
解决方案 »
- 定义数组存储10个数据,将数组中最大数放到第一个元素。谢谢咯
- java NIO中的基础问题。
- 怎么把数据源从Spring配置文件移动到properties文件就不行了?
- ant怎样结束一个程序
- eclipse问题,高手请进~
- 第1天学java有个问题 多谢帮忙
- 新手提问,运行时提示NullPointerException,不晓得错在哪,请有空的进来看看.
- 關於Jbulider7.0中設定classpath問題
- 为什么?为什么?为什么?为什么?为什么?
- 两个相同大小的int对象为什么在值超过-128~127后就不想等了
- 数组装N个元素,取R次,打印所有排列。求算法
- 怎样才算熟练掌握数据结构、常用算法
因为子类一定是父类类型,但父类不一定是子类类型。(狗是动物,动物不一定是狗,也可能是猫)所以不能直接强转,需要instanceof 一下。
//没有setCeiling()方法
}
public Account changeCeiling(long id, double ceiling){
//Account account = findAccountById(id);
Account account = new AAA();
if(account != null){
if(account instanceof CreditAccount){
CreditAccount creditAccount = (CreditAccount)account;
creditAccount.setCeiling(ceiling);
}else{
System.out.println("该用户是储蓄用户,不能设置透支额度1");
}
}else{
System.out.println("该用户不存在!");
}
return account;
}如何没有判断account是否是CreditAccount实例对象,就会出错,因为穿进去的是AAA类,他没有setCeiling方法
if(account instanceof CreditAccount){
account.setCeiling(ceiling);
//直接这样不行吗?多态是可以这样的。并且account是CreditAccount的一个实例啊。
//如果Account方法里面没有这个setCeiling方法,那就必须强转成子类,
//因为这样已经溢出多态的范围,不是公有的方法。
}
private abstact void saveMoney();
private abstact void getMoney();}class CreditAccount extends Account{private abstact void saveMoney(){
}
private abstact void getMoney(){
}
private abstact void setCeiling(){
}}//Account account = new CreditAccount();
//account.saveMoney();
//account.getMoney();
//account.setCeiling();//会报错
因为子类一定是父类类型,但父类不一定是子类类型。(狗是动物,动物不一定是狗,也可能是猫)所以不能直接强转,需要instanceof 一下。
你不转根本就编译不过嘛
public void printA(){
System.out.println("AAA");
}
public static void main(String args[]){
AAA a = new BBB();
//a.printB();编译通不过,父类的引用类型不能调用子类的方法
if(a instanceof BBB){
BBB b = (BBB)a;
b.printB();
((BBB) a).printB();//跟之前两句同样的效果
}
}
}class BBB extends AAA{
public void printB(){
System.out.println("BBB");
}
}
嗯嗯嗯 ,是的建议楼主看看:http://blog.csdn.net/yhk215492323/article/details/6700425