面向对象的 一个很强大的技术就是 多态了;
不妨先贴个代码:
using System ;
public class DrawingBase
{
public virtual void Draw( )
{
Console.WriteLine("I'm just a generic drawing object.") ;
}
}
public class Line : DrawingBase
{
public override void Draw( )
{ Console.WriteLine("I'm a Line.") ; }
}
public class Circle : DrawingBase
{
public override void Draw( )
{ Console.WriteLine("I'm a Circle.") ; }
}
public class Square : DrawingBase
{
public override void Draw( )
{ Console.WriteLine("I'm a Square.") ; }
}
public class DrawDemo
{
public static int Main(string[] args)
{
DrawingBase [] dObj = new DrawingBase [4];
dObj[0] = new Line( ) ;
dObj[1] = new Circle( ) ;
dObj[2] = new Square( ) ;
dObj[3] = new DrawingBase( ) ;
foreach (DrawingBase drawObj in dObj)
drawObj.Draw( ) ;
return 0;
}
}
上面的 便会呈现出多态的特性,每个方法各自执行相应子类的方法;
再看这段代码:
namespace Prog
{
class ObjState
{
}
class ThreadPoolDemo
{
public void Task(object stateObj)
{
ObjState stObj;
stObj = (ObjState)stateObj; //将object类类型转换为其它类类型
}
static void Main(string[] args)
{
}
}
}
//但做如下修改后,编程器称不能做强制类型转换:
static void Main(string[] args)
{
Object obj = new Object();
ObjState objstd;
objstd = (ObjState)obj;
}
//于是我把Object对像赋了个空值就可以了:
static void Main(string[] args)
{
Object obj = null;
ObjState objstd;
objstd = (ObjState)obj;
}
心得:面向对象严格上 说 是 父类对象不能向子类对象进行转换的,因为父类不包括子类的某些特有属性,但是 看到的上面的例外,在开发时 常看到 某个函数的参数是Object型的,到函数内部再 对其 进行转换,虽然目前还不知道这样做的好处在哪,但是从这里可以看出被本身实例化的的父类是不能再进行子类转化的,相反多态里面的只是声明了类,却用的是子类去实例化,以类似的道理如果 某个父类对象是由其子类隐式转化而来的,那么该父类被还原转换是因该可以的。想必多态玩的小技巧也是在这把。资历尚欠,不敢妄做定论。
分享到:
相关推荐
面向对象编程是Java的核心特性之一,它通过封装、继承和多态等概念来构建复杂的软件系统。本实验报告主要探讨了多态性这一关键概念,通过设计一系列类及其子类来实现具体的功能。 首先,实验设计了一个名为`Person`...
Java是一种面向对象的编程语言,其核心特性包括封装、继承、多态等。在这个实验指导书中,我们将深入探讨其中的抽象类、接口和多态性,这些都是Java软件开发中的重要概念。 1. **抽象类(Abstract Class)** 抽象...
Java是一种广泛使用的面向对象的编程语言,其设计目标是具有高度的可移植性、健壮性和安全性。在Java中,多态性(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装和继承。多态性使得代码更加灵活,能够...
在Java编程语言中,多态(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装和继承。多态性是指一个接口或者类可以表现出多种形态,使得程序在运行时能够根据实际的对象类型执行相应的方法。这种特性大大...
在C#编程语言中,多态(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装和继承。多态允许我们使用一个接口来处理不同类型的对象,从而简化代码,提高代码的可扩展性和复用性。在这个“C#中应用多态的...
Java多态是面向对象编程中的一个核心特性,它允许我们以一种统一的方式处理不同类型的对象。在Java中,多态性主要通过继承、接口和方法重写(Override)来实现。这里我们将深入探讨从虚拟机(JVM)的角度来看,Java...
Java中的多态是面向对象编程的一个核心特性,它允许我们以一种统一的方式处理不同类型的对象。在本PPT教案中,通过宠物喂食的例子来解释多态的概念和用途。 首先,例子展示了宠物(如狗狗和企鹅)有不同的饮食需求...
Java中的多态性是面向对象编程的一个核心特性,它允许我们使用父类引用指向子类对象,从而实现灵活的代码编写和复用。多态主要体现在子类型多态上,这是通过继承和接口实现的。Java中的多态行为主要包括方法的重写...
多态是面向对象编程中三大机制之一,其原理建立在"从父类继承而来的子类可以转换为其父类"这个规则之上,换句话说,能用父类的地方,就能用该类的子类。当从父类派生了很多子类时,由于每个子类都有其不同的代码实现...
面向对象的三大特性之一——多态,是编程中极为重要的概念。它允许我们设计出更加灵活、可扩展的代码,使程序能够以一种统一的方式处理不同的对象,即使这些对象具有不同的具体实现。在Java中,多态主要体现在方法的...
在Java编程语言中,封装、继承和多态是面向对象编程的三大特性,它们构成了Java类设计的基础。以下是对这些概念的详细解释: **封装**是面向对象编程的核心原则之一,它强调数据和行为的结合,保护数据不受非法访问...
Java多态是面向对象编程中的一个...总结来说,Java多态是面向对象编程的关键特性之一,它通过方法重写和对象的类型转换,实现了代码的灵活性、可扩展性和复用性。理解并熟练运用多态性,对于提升Java编程能力至关重要。
3. **类型转换**:在多态中,子类对象可以被当作父类对象来处理,这就是所谓的向上转型。这允许我们使用父类引用指向子类对象,从而调用子类特有的方法或属性(如果这些方法或属性在父类中声明为非私有的)。 4. **...
在Java编程语言中,多态性是面向对象编程的一个核心特性,它允许我们使用一个类的引用来调用不同类的方法,这些类可能是该引用类的子类。这一特性提供了代码的灵活性和可扩展性,使得程序设计更加简洁且易于维护。 ...
Java语言的三大特性,即封装、继承和多态,构成了面向对象编程的核心概念。封装是隐藏类的内部实现,提供公共接口供外部调用,以此提高代码的安全性和可维护性。继承则是为了代码复用,当一个类A是另一个类B的子类,...
在面向对象编程中,继承和多态是两个核心概念,它们在C#这样的面向对象语言中扮演着至关重要的角色。C#的继承允许我们创建新的类,这些新类不仅拥有原有类的特性,还能添加新的功能或修改已有的行为。多态则是指一个...
Java中的多态性是面向对象编程的一个核心特性,它允许不同类的对象对同一消息或方法调用做出不同的响应。在Java中,多态性主要体现在使用父类引用指向子类对象的能力,这被称为“向上转型”。 1. 多态的定义: 多态...
•如果编译时类型和支行时的类型不一致,这就有可能出现所谓的多态。 •两个相同类型的引用变量,由于它们实际引用的对象的类型不同,当它们调用同名方式时,可能呈现出多种行为 特征,这就是多态。 ...
- `static_cast`用于基本类型之间的转换以及指针或引用的非多态转换。 - `reinterpret_cast`用于基本类型的比特级转换。 - `dynamic_cast`用于运行时类型识别和安全的向下转型。 2. 参数多态:通过函数参数类型...
多态是面向对象的第三大特征,它有三个优点:改善代码的组织结构和可读性、能够创建可扩展的程序、消除类型之间的耦合关系。多态的概念主要体现在向上转型中,Java 允许把子类对象赋值给父类的引用变量,不用做任何...