17
1 抽抽抽抽抽抽抽 抽抽抽抽抽抽抽 (Abstract Classes (Abstract Classes and Interfaces) and Interfaces) 鄭鄭鄭 鄭鄭鄭 鄭鄭鄭鄭鄭鄭 鄭鄭鄭鄭鄭鄭 鄭鄭鄭鄭鄭鄭 鄭鄭鄭鄭鄭鄭 / / 鄭鄭鄭鄭鄭鄭鄭 鄭鄭鄭鄭鄭鄭鄭 / / 鄭鄭鄭鄭鄭鄭鄭 鄭鄭鄭 鄭鄭鄭鄭鄭鄭鄭 鄭鄭鄭

1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

Embed Size (px)

Citation preview

Page 1: 1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

1

抽象類別與介面抽象類別與介面(Abstract Classes (Abstract Classes

and Interfaces)and Interfaces)

鄭士康鄭士康國立台灣大學國立台灣大學

電機工程學系電機工程學系 //電信工程研究所電信工程研究所 //資訊網路與多媒體研究所資訊網路與多媒體研究所

Page 2: 1 抽象類別與介面 (Abstract Classes 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());

Page 3: 1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

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(); }}

Page 4: 1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

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; }} }}

Page 5: 1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

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; }} }}}}

Page 6: 1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

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());

Page 7: 1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

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(); }}

Page 8: 1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

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; }} }}

Page 9: 1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

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; }} }}}}

Page 10: 1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

10

抽象類別與介面抽象類別與介面• 修飾語修飾語• 欄位變數欄位變數• 建構式建構式• 函式方法覆寫與實作函式方法覆寫與實作• 多重繼承多重繼承

Page 11: 1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

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(); }} }}

Page 12: 1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

12

MultiInterface.Program (2/MultiInterface.Program (2/3)3)

interface Planeinterface Plane {{ void Fly();void Fly(); }}

interface Shipinterface Ship {{ void Sail();void Sail(); }}

Page 13: 1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

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("空中飛行空中飛行 ");"); }} }}}}

Page 14: 1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

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() );

Page 15: 1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

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(); }}

Page 16: 1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

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; }}

Page 17: 1 抽象類別與介面 (Abstract Classes and Interfaces) 鄭士康國立台灣大學 電機工程學系 / 電信工程研究所 / 資訊網路與多媒體研究所

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; }} }}}}