什么情况下能够自动转型?
1、必须存在继承关系之后才能自动转型
2、子类对象向父类类型自动转型
自动转型的格式
1、格式一
:父类类型 对象名=new 子类构造方法(参数值);
2、格式二
:访问修饰符 返回值类型 方法名(父类名 参数值){}
父类类型 对象名A=new 父类构造方法(参数值);
子类类型 对象名B=new 子类构造方法(参数值);
方法名 (对象名A);
方法名 (对象名B);
自动转型的优点和缺点
1、优点:提高程序的扩展性,提高代码的重用性。举个例子。
public class A{……}
public class a extends A{……}
public class b extends A{……}
public class c extends A{……}
有一个父类A 子类a,b,c,d继承了父类A
public void method(A A1){……}
有一个以父类类型为参数的方法,假设每一个子类都要用到这个方法,我们不必为每一个子类再去写这么一个方法,我们可以直接利用自动转型:
a a1 =new a();
b b1 =new b();
c c1 =new c();
虽然method方法的参数是父类类型,但是我们可以直接将子类类型作为参数。
method(a1);
method(b1);
method(c1);
2、缺点
无法调用子类中特有的属性和方法,这是由于java编译机制的原因,在Java的编译机制中只考虑对象名的类型,如果调用的属性和方法在对象名类型里能够找到则编译通过,否则编译失败。