# 向上转型
对象可以作为自己本身的类型使用,也可以作为它的基类型使用。把对某个对象的引用视为对其基类型的引用的做法被称为向上转型。
向上转型是一个较专用类型向通用类型转换,所以总是很安全的。因为导出类是基类的一个超集,可能比基类含有更多的方法,所以在向上转型过程中,类接口中唯一可能发生的事情就是丢失方法。
向上转型变量类型由new决定,还是声明?
```java
public class Father {
public String name = "父类";
public void f1(){
System.out.println("这是父类方法");
}
}
public class Son extends Father{
public String name = "子类";
public void f1(){
System.out.println("这是子类方法f1");
}
public void f2(){
System.out.println("这是子类方法f2");
}
public static void main(String[] args) {
Father f = new Son();
System.out.println(f.name);
f.f1();
f.f2();//Cannot resolve method 'f2' in 'Father'
}
}
output:
父类
这是子类方法f1
```
(1)对象的类型是由创建它的类决定的,而不是由声明它的变量决定。
(2)父类引用只能调用父类的变量和方法
(2)父类方法只有在子类没有重写的情况下可以被父类类型的引用调用。如果子类重写了该方法就会调用子类的方法(动态连接)。
(4)f.f2()报错,向上转型不能调用子类中独有的方法
[参考链接](https://blog.csdn.net/kavensu/article/details/8079460?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242)