class A{
public void fun1(){
System.out.println("A--->小三真好!!");
}
public void fun2(){
this.fun1();
}
public void fun8(){
System.out.println("B----->小三再见!!");
}
}
class B extends A{
public void fun5(){
System.out.println("B----->小三你好,小三再见!!");
}
public void fun3(){
System.out.println("B----->小三再见!!");
}
}
public class DuotaiDemo1 {
public static void main(String[] args) {
A a=new B();
B b1=(B)a;
b1.fun1();
b1.fun2();
b1.fun3(); ------解决方案-------------------- 就好比
List listData = new ArrayList();
ArrayList d = (ArrayList) listData;
转型。
------解决方案-------------------- B继承了A,但是B没有重写A的各个方法,你是想看b1对自身的引用,还是对父类的引用? ------解决方案-------------------- A a=new B();
B b1=(B)a;
b1.fun1();
b1.fun2();
b1.fun3();
比较好的写法是
A a=new B();
B b1=(B)a;
a.fun1();
a.fun2();
b1.fun3();
子类调用从父类继承的方法,利用多态可以直接调用。而fun3是子类自己的方法,使用父类定义的对象是没有办法调用的,所以必须 B b1=(B)a;转换定义类型来进行调用。 ------解决方案--------------------
A a = new B(); // 父类引用指向子类对象
B b1 = (B) a; // 强制类型转换
class A {
public void fun1() {
System.out.println("A--->小三真好!!");
}
public void fun2() {
this.fun1();
}
public void fun8() {
System.out.println("B----->小三再见!!");
}
}
class B extends A {
public void fun5() {
System.out.println("B----->小三你好,小三再见!!");
}
public void fun3() {
System.out.println("B----->小三再见!!");
}
}
public class DuotaiDemo1 {
public static void main(String[] args) {
A a = new A(); // 父类引用指向子类对象
B b1 = (B) a; // 强制类型转换
b1.fun1();
b1.fun2();
b1.fun3();
}
}
------解决方案-------------------- 你的实例是用A声明的,而B对A进行了扩展,实例化的是B对象。如果想要使用B的独有方法,必须强转成B ------解决方案-------------------- 这是个比较典型的多态的例子,先说 A a=new B(); 这个的理解是,用A的属性和方法去调用B的同名属性和方法。这里你操作的A中的所有属性和方法,都会由B中同名的属性和方法去实现。正如上面的A中有fun1,fun2,fun8,B中有fun3,fun5。因为A中没有fun3,fun5。所以尽管你实例的是B,但是你却不能调用B中的fun3,fun5。B b1=(B)a; 这是强制类型转换,把A类型的a强转为B类型,强转后,就可以调用B中的fun3,fun5了,因为B是继续A的,当然也能调用A中的fun1,fun2,fun8. ------解决方案-------------------- A a=new B();
B b1=(B)a;
这儿的问题。。改成
A a=new A();
B b1=(B)a;
就可以了、。。。