java对象的向上、向下转型-创新互联
向上转型
成都创新互联主要从事网站制作、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务汝阳,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575public class StringDemo{public static void main(String [] args){StringC str = new StringA();//对象的向上转型
str.getInfo();
}
}
class StringA extends StringC{public void getInfo(){System.out.println("******** StringA **********");
}
}
class StringC{public void getInfo(){System.out.println("********** String *********");
}
}
输出:******** StringA **********
向上转型多用于统一参数或返回值
public class StringDemo{public static void main(String [] args){StringDemo strdemo = new StringDemo();
strdemo.func(new StringA());//子类A
strdemo.func(new StringB());//子类B
StringC stra = strdemo.demo("A");
StringC strb = strdemo.demo("B");
stra.getInfo();
strb.getInfo();
}
public void func(StringC str){//父类C,可用效的简洁代码,重载的过多书写
str.getInfo();
}
public StringC demo(String str){if (str.equals("A")) { return new StringA();
}else if(str.equals("B")){ return new StringB();
}
return new StringC();
}
}
class StringA extends StringC{public void getInfo(){System.out.println("******** StringA **********");
}
}
class StringC{public void getInfo(){System.out.println("********** String *********");
}
}
class StringB extends StringC{public void getInfo(){System.out.println("********* StringB *********");
}
}
输出结果为:
******** StringA **********
********* StringB *********
******** StringA **********
********* StringB *********
向下转型
public class StringDemo{public static void main(String [] args){StringC str = new StringA();// 先向上转型
str.getInfo();
StringA stra = (StringA) str;//再向下转型
stra.getInfo();
stra.strlenA();//才能使用子类的特殊方法
}
}
class StringA extends StringC{public void getInfo(){System.out.println("******** StringA **********");
}
public void strlenA(){System.out.println("********* 打印字符长度 ********");
}
}
class StringC{public void getInfo(){System.out.println("********** String *********");
}
}
输出:
******** StringA **********
******** StringA **********
********* 打印字符长度 ********
向下转型需要要先向上转型,让父类与子类有联系了,父类才能变成子类
是否可以向下转型,可以先用 instanceof 关键字判断
public class StringDemo{public static void main(String [] args){StringC str1 = new StringC();// 不向上转型
System.out.println(str1 instanceof StringC);
System.out.println(str1 instanceof StringA);
StringC str2 = new StringA();// 向上转型
System.out.println(str2 instanceof StringC);
System.out.println(str2 instanceof StringA);
}
}
class StringA extends StringC{public void getInfo(){System.out.println("******** StringA **********");
}
public void strlenA(){System.out.println("********* 打印字符长度 ********");
}
}
class StringC{public void getInfo(){System.out.println("********** String *********");
}
}
输出:true、false、true、true
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享标题:java对象的向上、向下转型-创新互联
标题链接:http://azwzsj.com/article/poide.html