抽象方法 - 接口


    抽象类:
    在程序中使用关键字
abstract
    
    如果说正常类是一个完整的类的话,抽象类实际上是一个不完整的类.
  
    抽象类的特点:
    1.如果类中存在抽象方法,那么该方法不可以有实现部分.只能是方法声明.
    2.含有抽象方法的类一定是抽象类.
    3.抽象类不一定含有抽象方法.
    4.如果子类的父类为抽象类并且含有抽象方法的话,子类必须实现重写该抽象方法.
    5.virtual和abstract不能使用private修饰符,要使用public修饰符.
    6.virtual不能和abstract放在一起用.
    7.抽象类不能被实例化.
    8.抽象类可以包含静态成员.

 
    抽象类的作用:父类约束子类行为.



using System;

namespace OOP抽象方法
{
	abstract class Person
	{
		//
		public string name;

		public static void SayHi(){
			Console.WriteLine ("人类说");
		}

		public abstract void Say ();
		public abstract void Say (string name);

	}

	class Huang:Person
	{
		public override void Say ()
		{
			Console.WriteLine ("子类重写父类的抽象方法并实现!~");
		}

		public override void Say (string name)
		{
			Console.WriteLine ("嘿嘿嘿");
		}
	}

	abstract class Poor {
		public abstract void Buy();
	}

	class Rich:Poor {
		public override void Buy ()
		{
			Console.WriteLine ("想买就买呗!~");
		}
	}
	class MainClass
	{
		public static void Main (string[] args)
		{
//			new Huang ().Say();
//			Person.SayHi ();

			//练习:有一个类,它有好几个愿望,但是他很穷,他真的没钱买.
			//机缘巧合之下,他有了一个儿子,儿子很有钱.实现了他的愿望.

			new Rich ().Buy ();





		}
	}
}


抽象类的实例:


/*
 *    Shap类,表示一个形状的抽象类.
 *    该类包含一个求图形面积的抽象方法Area()
 *    请从Shap的派生类,梯形,圆形,三角形,菱形实现各自的面积.
 *    需要计算面积用到的参数,请自己想办法解决.
 *    
*/
using System;

namespace 抽象类练习题
{
	abstract class Shap
	{
		public abstract double Area ();
		public abstract double Area (string name);
	}

	class Triangle:Shap
	{
		int down;
		int up;
		int height;

		public Triangle(int down,int up,int height){
			this.down = down;
			this.up = up;
			this.height = height;
		}

		//实现父类抽象方法
		public override double Area ()
		{
			return (this.down + this.up) * this.height * .5f;
		}

		public override double Area (string name)
		{
			return (this.down + this.up) * this.height * .5f;
		}

	}
	
	class MainClass
	{
		public static void Main (string[] args)
		{
			Console.WriteLine (new Triangle (10, 10, 10).Area());

		}
	}
}



     接口:接口就是公共契约.
     接口的关键字:
interface
      接口和类属于同级关系,都属于c#中的编程单位.
     接口也被称作纯洁的抽象类
  
     接口特点:
     1.不能有字段
     2.接口内不能有修饰符
     3.接口中不能有方法体(方法实现)
     4.接口同样不可以被直接实例化
     5.接口里面成员总是公共的
     6.接口中可以有属性,但是不能有修饰符
     7.接口中可以有索引器/事件声明
     8.接口中声明的方法,子类实现的时候虽然也用override关键字,但是记住不属于重写.这里不能把
       override显示的声明出来.
  
  开发准则:尽量多用接口.
  能用接口的不用抽象类,能用抽象类不用虚方法.
  
  动态多态性.

 

using System;
using System.Collections;
namespace OOP接口
{
	interface IInput
	{
		void Read();
	}

	interface IInputTwo
	{
		void Read();
	}

	class Test:IInput,IInputTwo
	{
		public string name;


		//如果接口出现方法同名情况需要以下列方式实现,但是调用的时候
		//要用动态多态性调用,非常规调用方式
//		public void IInput.Read(){
//			Console.WriteLine ("1111");
//		}
//
//		public void IInputTwo.Read(){
//			Console.WriteLine ("2222");
//		}



		public void Read(){
			Console.WriteLine ("1111");
		}

//		public void Read(){
//			Console.WriteLine ("2222");
//		}

		public IInput T(){
			Test t = new Test ();
			t.name = "测试返回接口实例";
			return t;
		}
			
	}

	class MainClass
	{		
		public static void Main (string[] args)
		{
//			new Test ().Read ();

			//返回接口实例
			Test t = new Test();
			Console.WriteLine (t.name);

			Test t1 = (Test)t.T ();
			Console.WriteLine (t1.name);

//			Test t = new Test ();

		}


	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值