黑马程序员技术交流社区
标题:
谁给介绍下多态???
[打印本页]
作者:
风雪再现
时间:
2013-7-8 21:21
标题:
谁给介绍下多态???
我只知道多态的实现有虚方法、抽象方法、还有接口,其他的不知道还有什么,而且是不怎么具体,希望给举个例子,介绍下。
作者:
yangchao313
时间:
2013-7-8 22:35
多态:可以理解为事物存在的多种表现形态。
1.多态的体现
父类的引用指向了自己的子类对象
父类的引用也可以接收自己的子类对象
2.多态的前提
必须是类与类之间有关系。继承或者实现
通常还要存在覆盖
3.多态的好处
多态的出现大大的提高了程序的扩展性
4.多态的弊端
虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员
---------------------------------------------------------------------------------------------------
多态的实例
class fu
{
}
在多态中成员函数的特点
在编译时期参阅引用型变量所属的类中是否有调用方法,如果有,编译通过;如果没有,编译失败
在运行时期参阅对象所属的类中是否有调用方法
总结:成员函数在多态调用时编译看左边,运行看右边
在多态中成员变量的特点
无论编译和运行都参考左边(引用型变量所属的类)
在多态中静态成员函数的特点
无论编译和运行都参考右边
作者:
yangchao313
时间:
2013-7-8 22:56
不好意思 网不好 这是实例
多态的实例
class Fu
{
void method1 ()
{
System.out.println("fu method_1");
}
void method2 ()
{
System.out.println("fu method_2");
}
}
class Zi extends Fu
{
void method1 ()
{
System.out.println("zi method_1");
}
void method3 ()
{
System.out.println("zi method_3");
}
}
class DuoTai
{
public static void main(String[] args)
{
Fu f = new Zi()
f.method1(); //打印zi method_1
f.method2(); //打印fu method_2
/*在多态中成员函数的特点
在编译时期参阅引用型变量所属的类中是否有调用方法,如果有,编译通过;如果没有,编译失败
在运行时期参阅对象所属的类中是否有调用方法
总结:成员函数在多态调用时编译看左边,运行看右边
*/
}
}
以下开发时基本不用,一般出现在面试下
在多态中成员变量的特点
无论编译和运行都参考左边(引用型变量所属的类)
在多态中静态成员函数的特点
无论编译和运行都参考右边
作者:
changweihua
时间:
2013-7-9 08:29
public interface ISay
{
void Say();
}
public class RealDuck : ISay
{
public void Say()
{
Console.WriteLine("我是真鸭子");
}
}
public class WoodDuck : ISay
{
public void Say()
{
Console.WriteLine("我是木鸭子");
}
}
public class FakeDuck : ISay
{
public void Say()
{
Console.WriteLine("我是假鸭子");
}
}
public class TestDuck
{
public static void Test()
{
//接口多态
List<ISay> ducks = new List<ISay>{
new RealDuck(), new FakeDuck(), new WoodDuck()
};
foreach (var duck in ducks)
{
duck.Say();
}
Console.WriteLine("---------------------------");
List<Duck> ducks2 = new List<Duck>{
new RealDuck2(), new FakeDuck2(), new WoodDuck2()
};
foreach (var duck in ducks2)
{
duck.Say();
}
}
}
public class Duck
{
public virtual void Say(){}
}
public class RealDuck2 : Duck
{
public override void Say()
{
Console.WriteLine("我是RealDuck2");
}
}
public class WoodDuck2 : Duck
{
public override void Say()
{
Console.WriteLine("我是WoodDuck2");
}
}
public class FakeDuck2 : Duck
{
public override void Say()
{
Console.WriteLine("我是FakeDuck2");
}
}
复制代码
以前回答的别人的答案,可以参考下
作者:
popoluno
时间:
2013-7-9 14:33
接口的多种不同的实现方式即为多态,通过继承实现的不同对象调用相同的方法,表现出不同的行为
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2