黑马程序员技术交流社区
标题:
关于多态
[打印本页]
作者:
乔九
时间:
2012-10-21 22:30
标题:
关于多态
interface A
{
}
class B implements A
{
public void function()
{
System.out.pintln("func");
}
}
class Demo
{
public static void main(String[] args)
{
A a=new B();
a.function();
}
}
编译报错,A a=new B();这个不就是父类的引用指向子类的多态吗?
作者:
张其辉
时间:
2012-10-21 22:50
A a=new B();
a.function();
这其实就是向上转型问题,B转型之后相当于只能用A中的方法,但是你的接口A中没有方法,而B也不能再用自身的特有方法了,
想要用function()方法必须要向下转型:
A a=new B();
B b1=(B) a;
b1.function();
作者:
刘学宾
时间:
2012-10-21 23:06
在这里,程序中的B转型后要使用A的方法,但由于A没有方法,这时用function()方法的话,要采用向下转型才可以。
作者:
王健宇
时间:
2012-10-21 23:12
A a=new B();这是向上转型,就相当于A的实例,而父类无法调用子类中function()方法,
加上B b=(B)a;
b.function();
就可以了
作者:
任雷彬
时间:
2012-10-21 23:13
首先,这个是父类的引用指向子类的多态不错。但是子类在实现父类的同时会复写父类的属性和方法,
但是代码中父类没有定义属性和方法,所以在子类B中的 function()方法 是子类增添的特有方法。
父类的引用指向子类, A a=new B(); 子类会有自动提升类型与父类一致,所以会调用父类的功能,不会调用子类的特有方法。
而想要调用 a.function()方法, 需要强制降低类型才可以调用,a = (B)a;
interface A //父类中未定义属性和方法
{
}
class B implements A
{
public void function() //子类特有的方法
{
System.out.pintln("func");
}
}
class Demo
{
public static void main(String[] args)
{
A a=new B(); //类型自动提升,new B()自动转换为A引用类型。
a.function(); //调用方法,强制降低类型 a=(B)a;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2