换个例子:
Form1类 继承自Form类平时这样用:
Form1 frm1= new Form1();你想这样用:
Form frm1= new Form1();如果这样用
Form frm = new Form();
和Form1还有什么关系?
Form1类 继承自Form类平时这样用:
Form1 frm1= new Form1();你想这样用:
Form frm1= new Form1();如果这样用
Form frm = new Form();
和Form1还有什么关系?
调试欢乐多
楼主这样做,虽然不能访问到B类的公共方法,
但A a = new B(); 这样创建实例,
首先会执行到B类中得成员变量,也会执行到B类的构造函数(如果有的话),
也许有这种需要,只要执行某个类的成员变量和构造函数,
所以还是有意义的!!
A a = new B();//相当于A a;
B b = new B();
a = b;
反过来...基类不可以转换为派生类,隐式显式都不行,所以“直接用A a = new A();”就是另一个概念了...实际应用中这样的用法是没什么意义的...也许有人觉得有时这样用清楚一些,比如...
A a = new B();
func(a);void func(A a){}但它其实和下面这段没有不同,一样清楚...
B b = new B();
func(b);void func(A a){}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
A X;
X = new A();
Print(X);
X = new B();
Print(X);
Console.Read();
} class A
{
public A()
{
Console.WriteLine("A");
}
} class B:A
{
public B()
{
Console.WriteLine("B");
}
} static void Print(A X)
{
if (X is B)
Console.WriteLine("Print B");
else
Console.WriteLine("Print A");
}
}
}
你看C#里的参数不就是么
Object sendersender可以是任何从Object继承的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
A X;
X = CreateClass(typeof(A));
X = CreateClass(typeof(B));
Console.Read();
} class A
{
public A()
{
Console.WriteLine("A");
}
} class B : A
{
public B()
{
Console.WriteLine("B");
}
} static A CreateClass(Type T)
{
if (T==typeof(B))
return new B();
else
return new A();
}
}
}
如果父类是抽象类那就不能new 只能通过子类间接new
不过这时子类的方法和属性将会被父类覆盖掉
这是一种简单的多态
多态有四种:
1.强制多态
2.重载多态 (1和2又叫伪多态)
3.参数化多态
4.重写多态(3和4又叫曾多态)
这样做是为了实现多态性,只是你的太简单了,没显示出来罢了