class Animal
{
public virtual void call() {
Console.WriteLine("无声的叫唤");
}
}
class Dog : Animal
{
// new的作用是隐藏父类的同名方法
//public new void call() {
//Console.WriteLine("叫声:汪~汪~汪~");
//}
public override void call() {
Console.WriteLine("叫声:汪~汪~汪~");
}
public void smell() {
Console.WriteLine("嗅觉相当不错!");
}
}
static void Main(string[] args)
{
Animal animal = new Dog(); //向上转型
animal.call();
Dog dog = (Dog)animal;//向下转型
dog.call();
dog.smell();
}
//案例
public class Shape
{
public int X { get; private set; }
public int Y { get; private set; }
public int Height { get; set; }
public int Width { get; set; }
// 虚方法
public virtual void Draw()
{
Console.WriteLine("执行基类的画图任务");
}
}
class Circle : Shape
{
public override void Draw()
{
base.Draw();
Console.WriteLine("画一个圆形");
}
}
class Rectangle : Shape
{
public override void Draw()
{
base.Draw();
Console.WriteLine("画一个长方形");
}
}
class Triangle : Shape
{
public override void Draw()
{
base.Draw();
Console.WriteLine("画一个三角形");
}
}
class Program
{
static void Main(string[] args)
{
Shape circle=new Circle();
circle.Draw();
Shape rectangle=new Rectangle();
rectangle.Draw();
Shape triangle=new Triangle();
triangle.Draw();
}
}
//父类做返回值
class Person
{
public virtual void Eat()
{
}
}
class WhitePerson:Person
{
public override void Eat()
{
Console.WriteLine("热狗");
}
}
class YellowPerson:Person
{
public override void Eat()
{
Console.WriteLine("饺子");
}
//写一个GetPerson方法,返回值为父类,
//根据传入的不同人种来确定吃什么
Person GetPerson(string s)
{
Person p=null;
if (s.Equals("中国人"))
{
p = new YellowPerson();
}
else if (s.Equals("外国人"))
{
p= new WhitePerson();
}
else
{
return p;
}
p.Eat();
return p;
}
}
//父类做参数
class Animal
{
public virtual void Swimming()
{
Console.WriteLine("动物游泳");
}
}
class Cat:Animal
{
public override void Swimming()
{
Console.WriteLine("猫挠");
}
//写一个方法,完成动物游泳(对象做参数)
void GetSwimming(Animal a)//a是引用
{
if (a is Cat)
{
Cat c = (Cat)a;//向下转型
c.Swimming();
}
}
}
static void Main(string[] args)
{
Cat c = new Cat();
Dog d = new Dog();
Animal a = c;
// Animal a = d;
c.GetSwimming(a);
}
static void Main(string[] args)
{
//20.
Shape[] s = new Shape[3];
s[0] = new Cirele(2);
s[0].girth();
s[0].area();
s[1] = new Rect(2,5);
s[1].girth();
s[1].area();
s[2] = new Square(2);
s[2].girth();
s[2].area();
//21.
Shape s1 = new Shape();
s1 = new SS().getShape(1);
s1.girth();
s1.area();
s1 = new SS().getShape(0);
s1.girth();
s1.area();
s1 = new SS().getShape(2);
s1.girth();
s1.area();
}
class Shape
{
public virtual void girth()
{
}
public virtual void area()
{
}
}
class Cirele : Shape
{
private double r;
public double R
{
get { return r; }
set { r = value; }
}
public Cirele() { }
public Cirele (double a)
{
r = a;
}
public override void girth()
{
Console.WriteLine("圆的周长为:"+2 * Math.PI * r);
}
public override void area()
{
Console.WriteLine("圆的面积为:" + Math.PI * r * r);
}
}
class Rect : Shape
{
private double a;
private double b;
public double B
{
get { return b; }
set { b = value; }
}
public double A
{
get { return a; }
set { a = value; }
}
public Rect(double a, double b)
{
this.a = a;
this.b = b;
}
public Rect() { }
public override void girth( )
{
Console.WriteLine("矩形的周长为:" + 2 * (a + b));
}
public override void area()
{
Console.WriteLine("矩形的面积为:" + (a * b));
}
}
class Square : Rect
{
private double b;
public double B
{
get { return b; }
set { b = value; }
}
public Square() { }
public Square( double w) :base(w,0)
{
b = w;
}
public override void girth()
{
Console.WriteLine("正方形的周长为:" + 4 *b);
}
public override void area()
{
Console.WriteLine("正方形的面积为:" + (b* b));
}
}
class SS
{
//21.
public Shape getShape(int i)
{
Shape a = null;
if (i == 0)
{
a = new Cirele(1);
}
else if (i == 1)
{
a = new Rect(3,2);
}
else if (i == 2)
{
a = new Square(2);
}
return a;
}
//22.
public void Get(Shape s)
{
if (s is Cirele)
{
s.girth();
s.area();
}
else if (s is Rect)
{
s.girth();
s.area();
}
else if (s is Square)
{
s.girth();
s.area();
}
}
}