![]()
父类引用变量强制转子类,子类的方法可以调用了
class A{
public void say(){
System.out.println("类A进行say");
}
}
class B extends A{
@Override
public void say(){
System.out.println("子类B进行say");
}
public void say1(){
System.out.println("子类B进行say1");
}
}
class C extends A{
@Override
public void say(){
System.out.println("子类C进行say");
}
public void say1(){
System.out.println("子类C进行say1");
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
A a1 = new B();//向上转型
A a2 = new C();
a1.say();// 子类B进行say
a2.say();// 子类C进行say
//a对象会遗失和父类不同的方法,a点不出来say1()这个方法
B b1 = (B)a1;
b1.say1();//子类B进行say1
b1.say(); //子类B进行say
}
}
/*向上塑性的好处是,增加extensible,
增加一个实现类c,照样可以用A的引用变量.say()*/
—————————————————————————————————————————————————
接口类型强制转换成实现类类型
interface A{
public void say();
}
class B implements A{
@Override
public void say(){
System.out.println("子类B进行say");
}
public void say1(){
System.out.println("子类B进行say1");
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
A a = new B();
a.say();//子类B进行say,点不出say1()
B b =(B)a; //这里必须进行强制转换;接口类型a转类类型b
b.say();//子类B进行say
b.say1();//子类B进行say1
}
}