父类引用变量强制转子类,子类的方法可以调用了 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 } }
时间: 2024-10-19 19:37:29