---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
一多态的前提:(1)要有继承关系(或者实现关系)
(2)方法的重写
(3)父类的引用指向了自己子类的对象
class Fu
{
public void show()
{
System.out.println("fu show");
}
}
class Zi extends Fu
{
public void show()
{
System.out.println("zi show");
}
}
class Day02
{
public static void main(String[] args)
{
Fu f = new Zi();
f.show();
}
}
二多态间编译成员的特点:
(1)成员变量:编译看左边,执行看左边
(2)成员函数:编译看左边,执行看右边
class Fu
{
public int num = 10;
public void show()
{
System.out.println("fu show");
}
}
class Zi extends Fu
{
public int num = 20;
public void show()
{
System.out.println("zi show");
}
}
class Day02
{
public static void main(String[] args)
{
Fu f = new Zi();
//编译看左边(fu中的show方法)
//执行看右边(zi中的show方法)
f.show();
//编译和执行都看左边的(fu中的num)
System.out.println(f.num);
}
}
三.多态中的向上转型和向下转型
(1)向上转型:小转大
(2)向下转型:大转小
向下转型是为了用到子类里的特有方法
注解:建立子类对象,调用子类的特有方法也能够,可是假设这样做
内存中就有了两个子类的对象,效率低,不利于节省内存空间
class Fu
{
public void show()
{
System.out.println("fu show");
}
}
class Zi extends Fu
{
public void show()
{
System.out.println("zi show");
}
public void method()
{
System.out.println("zi method");
}
}
class Day02
{
public static void main(String[] args)
{
Fu f = new Zi();//向上转型
f.show();//zi show
Zi z = (Zi)f;//向下转型
z.method();
}
}
四.多态的定义&弊端&优点
定义:对象在不同一时候刻表现出来的不同状态
弊端:父类的引用不能使用子类的特有功能
优点:提高了代码的扩展性和可维护性