Upload
gavin-patrick
View
235
Download
0
Embed Size (px)
Citation preview
1
抽象類別與介面抽象類別與介面(Abstract Classes (Abstract Classes
and Interfaces)and Interfaces)
鄭士康鄭士康國立台灣大學國立台灣大學
電機工程學系電機工程學系 //電信工程研究所電信工程研究所 //資訊網路與多媒體研究所資訊網路與多媒體研究所
2
AbstractClass.Program (1/4)AbstractClass.Program (1/4)using System;using System;namespace AbstractClassnamespace AbstractClass{{ /*/* * * 示範抽象類別之應用示範抽象類別之應用 * skj 5/7/2007* skj 5/7/2007 */*/ class Programclass Program {{ static void Main(string[] args)static void Main(string[] args) {{ double a = 5.0;double a = 5.0; Square sq = new Square(a);Square sq = new Square(a); Console.WriteLine("Console.WriteLine("正方形正方形 sqsq之面積為之面積為 " + sq.Area());" + sq.Area());
3
AbstractClass.Program (2/4)AbstractClass.Program (2/4)Circle c = new Circle(a);Circle c = new Circle(a);
Console.WriteLine("Console.WriteLine("圓形圓形 cc之面積為之面積為 " + c.Area());" + c.Area()); Console.ReadLine();Console.ReadLine(); }} }}
public abstract class Shapepublic abstract class Shape {{ private string shape;private string shape; public Shape(string shape)public Shape(string shape) {{ this.shape = shape;this.shape = shape; Console.WriteLine("Console.WriteLine("建立建立 " + shape);" + shape); }} abstract public double Area();abstract public double Area(); }}
4
AbstractClass.Program (3/4)AbstractClass.Program (3/4)public class Square : Shapepublic class Square : Shape
{{ double a;double a; public Square(double a) : base("public Square(double a) : base("正方形正方形 ")") {{ this.a = a;this.a = a; }} public override double Area()public override double Area() {{ return a * a;return a * a; }} }}
5
AbstractClass.Program (4/4)AbstractClass.Program (4/4)public class Circle : Shapepublic class Circle : Shape
{{ double r;double r; public Circle(double r)public Circle(double r) : base(": base("圓形圓形 ")") {{ this.r = r;this.r = r; }} public override double Area()public override double Area() {{ return Math.PI * r * r;return Math.PI * r * r; }} }}}}
6
UsingInterface.Program (1/UsingInterface.Program (1/4)4)
using System;using System;namespace UsingInterfacenamespace UsingInterface{{ /*/* * * 示範介面之應用示範介面之應用 * 5/7/2007* 5/7/2007 */*/ class Programclass Program {{ static void Main(string[] args)static void Main(string[] args) {{ double a = 5.0;double a = 5.0; Square sq = new Square(a);Square sq = new Square(a); Console.WriteLine("Console.WriteLine("正方形正方形 sqsq之面積為之面積為 " + sq.Area());" + sq.Area());
7
UsingInterface.Program (2/UsingInterface.Program (2/4)4)
Circle c = new Circle(a);Circle c = new Circle(a); Console.WriteLine("Console.WriteLine("圓形圓形 cc之面積為之面積為 " + c.Area());" + c.Area()); Console.ReadLine();Console.ReadLine(); }} }}
interface Shapeinterface Shape {{ double Area();double Area(); }}
8
UsingInterface.Program (3/UsingInterface.Program (3/4)4)
public class Square : Shapepublic class Square : Shape {{ double a;double a; public Square(double a)public Square(double a) {{ this.a = a;this.a = a; }} public double Area()public double Area() {{ return a * a;return a * a; }} }}
9
UsingInterface.Program (4/UsingInterface.Program (4/4)4)
public class Circle : Shapepublic class Circle : Shape {{ double r;double r; public Circle(double r)public Circle(double r) {{ this.r = r;this.r = r; }} public double Area()public double Area() {{ return Math.PI * r * r;return Math.PI * r * r; }} }}}}
10
抽象類別與介面抽象類別與介面• 修飾語修飾語• 欄位變數欄位變數• 建構式建構式• 函式方法覆寫與實作函式方法覆寫與實作• 多重繼承多重繼承
11
MultiInterface.Program (1/MultiInterface.Program (1/3)3)
using System;using System;namespace MultiInterfacenamespace MultiInterface{{ /* /* 示範多重介面之實作示範多重介面之實作 * skj 5/8/2007* skj 5/8/2007 */*/ class Programclass Program {{ static void Main(string[] args)static void Main(string[] args) {{ SeaPlane sp = new SeaPlane();SeaPlane sp = new SeaPlane(); sp.Sail();sp.Sail(); sp.Fly();sp.Fly(); Console.ReadLine();Console.ReadLine(); }} }}
12
MultiInterface.Program (2/MultiInterface.Program (2/3)3)
interface Planeinterface Plane {{ void Fly();void Fly(); }}
interface Shipinterface Ship {{ void Sail();void Sail(); }}
13
MultiInterface.Program (3/MultiInterface.Program (3/3)3)
public class SeaPlane : Plane, Shippublic class SeaPlane : Plane, Ship {{ public SeaPlane()public SeaPlane() {{ Console.WriteLine("Console.WriteLine("建立水上飛機建立水上飛機 ");"); }} public void Sail()public void Sail() {{ Console.WriteLine("Console.WriteLine("水上滑行水上滑行 ");"); }} public void Fly()public void Fly() {{ Console.WriteLine("Console.WriteLine("空中飛行空中飛行 ");"); }} }}}}
14
CastMultiInterfaces.PrograCastMultiInterfaces.Program (1/4)m (1/4)
using System;using System;namespace CastMultiInterfacesnamespace CastMultiInterfaces{{ class Programclass Program {{ static void Main(string[] args)static void Main(string[] args) {{ double a = 5.0;double a = 5.0; Square sq = new Square(a);Square sq = new Square(a); Rhombus rhomb = sq as Rhombus;Rhombus rhomb = sq as Rhombus; Console.WriteLine(Console.WriteLine(
"sq"sq的面積以菱形公式計算得的面積以菱形公式計算得 "+rhomb.Area() );"+rhomb.Area() );
15
CastMultiInterfaces.Program CastMultiInterfaces.Program (2/4)(2/4)
if( sq is Rectangle ) if( sq is Rectangle ) {{ Rectangle rec = (Rectangle) sq;Rectangle rec = (Rectangle) sq; Console.WriteLine(Console.WriteLine(
"sq"sq的面積以矩形公式計算得的面積以矩形公式計算得 "+rec.Area() );"+rec.Area() ); }} Console.ReadLine();Console.ReadLine(); }} }}
interface Rectangleinterface Rectangle {{ double Area();double Area(); }}
16
CastMultiInterfaces.Program CastMultiInterfaces.Program (3/4)(3/4)
interface Rhombusinterface Rhombus {{ double Area();double Area(); }}
public class Square : Rectangle, Rhombuspublic class Square : Rectangle, Rhombus {{ private double a;private double a; private double d;private double d; public Square(double a) public Square(double a) {{ this.a = a;this.a = a; d = Math.Sqrt(2.0) * a;d = Math.Sqrt(2.0) * a; }}
17
CastMultiInterfaces.Program CastMultiInterfaces.Program (4/4)(4/4)
double Rectangle.Area()double Rectangle.Area() {{ return a * a;return a * a; }} double Rhombus.Area()double Rhombus.Area() {{ return 0.5 * d * d;return 0.5 * d * d; }} }}}}