向上转型
public 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