(变量私有的叫字段,公有的是属性)
对象是一个自包含的实体,用一组可识别的特性和行为来识别
类:具有相同的属性和功能的对象的抽象的集合
(类名字首字母要大写,如果是多个单词则各个单词首字母都要大写)
构造方法/构造函数,就是对类进行初始化。构造方法与类同名,无返回值,
也不需要void,在new时候调用
(所有类都有构造方法,如果不编码则系统默认生成空的构造方法,
若你有定义的构造方法,那么默认的构造方法就会失效了)
方法重载提供了创建同民的多个方法的能力,但是这些方法需使用不同的参数类型。
(方法名相同,但参数类型或个数有所不同)
protected 表示继承时,子类可以对基类有完全访问权。子类继承父类,则子类就拥有了父类的
除private外的属性和功能。(对子类公开,但不对其他类公开)
protected 只给继承的子类使用。
protected 只给继承的子类使用。
调用父类的成员,可以用base关键字
A7.继承的优点是,继承使得所有子类公共的部分都放在了父类,使得代码得到了共享,这样避
免了重复,另外,继承可使得修改或扩展继承而来的实现都较为容易
不继承的话,如果要修改功能,就必须在所有重复的方法中修改,代码越多,出错的可能就越大
不继承的话,如果要修改功能,就必须在所有重复的方法中修改,代码越多,出错的可能就越大
。
继承是有缺点的,父类变,则子类不得不变。继承会增大两个类之间的耦合性。
(is-a 一个类是另一个类的特殊种类时,可以考虑用继承;has-a 某个角色具有某一项责任时,
继承是有缺点的,父类变,则子类不得不变。继承会增大两个类之间的耦合性。
(is-a 一个类是另一个类的特殊种类时,可以考虑用继承;has-a 某个角色具有某一项责任时,
不适合用继承,如飞机场有飞机则飞机不能继承飞机场)
A8.多态表示不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。
1.子类以父类的身份出现。2.子类工作时以自己的方式来实现。3.子类以父类的身份出现时,子
1.子类以父类的身份出现。2.子类工作时以自己的方式来实现。3.子类以父类的身份出现时,子
类特有的属性和方法不可以使用。
为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚拟的。只是通过在
为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚拟的。只是通过在
该成员的返回类型之前添加virtual关键字来实现。子类可以选择使用override关键字,讲父类
实现替换为它自己的实现,这就是方法重写override,或方法覆写。
不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。
多态的原理是当方法被调用时,无论对象是否被转换为其父类,都只有位于对象继承链最末端
不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。
多态的原理是当方法被调用时,无论对象是否被转换为其父类,都只有位于对象继承链最末端
的方法实现会被调用。虚方法是按照其运行时类型而非编译时类型进行动态绑定调用的。
多态: 父类中virtual定义方法体 ,子类中通过override来具体实现
(不同的子类,实现的方式可以不同)
A9.重构 类名和构造函数名都继承父类(其中构造函数继承的方式是 方法名:base(),然后子类
多态: 父类中virtual定义方法体 ,子类中通过override来具体实现
(不同的子类,实现的方式可以不同)
A9.重构 类名和构造函数名都继承父类(其中构造函数继承的方式是 方法名:base(),然后子类
中重写实现的方法) 这样调用的方法相同,但是实现的效果可以达到不同
A10.抽象类 把实例化没有任何意义的父类(如Animal)改成抽象类。允许把类和方法声明为
abstract,即抽象类和抽象方法。
抽象方法没有方法体,直接在括号后加分号;
1)抽象类不能实例化 2)抽象方法是必须被子类重写的方法 3)如果类中包含抽象方法,那么类就
抽象方法没有方法体,直接在括号后加分号;
1)抽象类不能实例化 2)抽象方法是必须被子类重写的方法 3)如果类中包含抽象方法,那么类就
必须定义为抽象类,不论是否还包含其中一般方法
A11.接口 接口把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦实现了接口
,类就可以支持接口所指定的所有属性和成员。声明接口在语法上和声明抽象类完全相同,但不
允许提供接口中任何成员的执行方法。(接口不能实例化,不能有构造方法和字段,不能有修饰
符如public、private等;不能声明虚拟的或者静态的等)。实现接口的类就必须要实现接口中的
所有方法和属性。
抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现,一个类只能继承一个抽
抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现,一个类只能继承一个抽
象类,但可以实现多个接口等等。
第一,类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象;
第二,如果行为跨越不同类的对象,可使用接口;对于一些类似的类对象,用继承抽象类;
第三,从设计角度讲,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,
第一,类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象;
第二,如果行为跨越不同类的对象,可使用接口;对于一些类似的类对象,用继承抽象类;
第三,从设计角度讲,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,
而接口是根本不知道子类的存在,方法如何实现还不确定,预先定义。
(抽象类是自底而上抽象出来的,而接口是自顶向下设计出来的)
(抽象类是自底而上抽象出来的,而接口是自顶向下设计出来的)
A12.集合 数组的容量是固定的,而ArrayList的容量是可根据需要自动扩充的。
(ArrayList是System.Collections下的一部分,使用大小可按需动态增加的数组实现IList接口)
(ArrayList是System.Collections下的一部分,使用大小可按需动态增加的数组实现IList接口)
A13.泛型 声明一泛型变量,如:IList<Animal> arrayAnimal; (IList或List均可)
arrayAnimal=new List<Animal>();
arrayAnimal.Add(new Cat("小花"));...
arrayAnimal=new List<Animal>();
arrayAnimal.Add(new Cat("小花"));...
A7.继承
class Animal
{
protected string name="";
public Animal(string name)
{this.name=name;}
public Animal()
{this.name="无名";}
protected int shoutNum=3;
public int ShoutNum
{
get {return shoutNum;}
set {shoutNum=value; }
}
}
class Cat : Animal
{
public Cat () :base ()
{}
public Cat(string name)
{}
public string Shout()
{
string result="";
for(int i=0;i<shoutNum;i++)
{result += "喵, ";}
return "我的名字叫"+ name + ""+ result;
}
}
class Dog : Animal
{
public Dog () :base ()
{}
public Dog(string name)
{}
public string Shout()
{
string result="";
for(int i=0;i<shoutNum;i++)
{result += "汪, ";}
return "我的名字叫"+ name + ""+ result;
}
}
class Animal
{
protected string name="";
public Animal(string name)
{this.name=name;}
public Animal()
{this.name="无名";}
protected int shoutNum=3;
public int ShoutNum
{
get {return shoutNum;}
set {shoutNum=value; }
}
}
class Cat : Animal
{
public Cat () :base ()
{}
public Cat(string name)
{}
public string Shout()
{
string result="";
for(int i=0;i<shoutNum;i++)
{result += "喵, ";}
return "我的名字叫"+ name + ""+ result;
}
}
class Dog : Animal
{
public Dog () :base ()
{}
public Dog(string name)
{}
public string Shout()
{
string result="";
for(int i=0;i<shoutNum;i++)
{result += "汪, ";}
return "我的名字叫"+ name + ""+ result;
}
}
A8.多态
class Animal
{
public virtual string Shout() //虚方法,可以被子类重写
{ return ""; }
}
class Cat : Animal
{
public Cat():base()
{}
public Cat(string name):base(name)
{}
public override string Shout()
{
string result="";
for(int i=0;i<shoutNum;i++)
{
result+="喵, ";
}
return "我的名字叫"+ name + " "+result;
}
}
class Dog : Animal
{
public Dog():base()
{}
public Dog(string name):base(name)
{}
public override string Shout()
{
string result="";
for(int i=0;i<shoutNum;i++)
{
result+="汪, ";
}
return "我的名字叫"+ name + " "+result;
}
}
private Animal[] arrayAnimal;
private void button1_Click(object sender,EventArgs e)
{
arrayAnimal=new Animal[5];
arrayAnimal[0]=new Cat("小花");
arrayAnimal[1]=new Dog("阿毛");
arrayAnimal[2]=new Dog("小黑");
arrayAnimal[3]=new Cat("娇娇");
arrayAnimal[4]=new Cat("咪咪");
}
private void button2_Click(object sender,EventArgs e)
{
//由于多态性,所以叫的时候,会不同;程序会自动去找item是什么对象,如Cat,Dog
foreach(Animal item in arrayAnimal)
{ MessageBox.Show(item.Shout()); }
}
private void button1_Click(object sender,EventArgs e)
{
arrayAnimal=new Animal[5];
arrayAnimal[0]=new Cat("小花");
arrayAnimal[1]=new Dog("阿毛");
arrayAnimal[2]=new Dog("小黑");
arrayAnimal[3]=new Cat("娇娇");
arrayAnimal[4]=new Cat("咪咪");
}
private void button2_Click(object sender,EventArgs e)
{
//由于多态性,所以叫的时候,会不同;程序会自动去找item是什么对象,如Cat,Dog
foreach(Animal item in arrayAnimal)
{ MessageBox.Show(item.Shout()); }
}
A10.抽象类
abstract class Animal
{
protected abstract string getShoutSound();//没有方法体,直接加分号
}
//只要类中有抽象方法,则该类一定是抽象类;
//继承抽象类一定要实现抽象类的方法(即重写)
A11.接口
interface IChange
{
string ChangeThing(string thing); //表示返回sting型
}
class MachineCat:Cat,IChange //继承 Cat,并实现IChange接口
{
public MachineCat():base()
{}
public MachineCat(string name):base(name)
{}
public string ChangeThing(string thing)//实现接口的方法
{return base.Shout()+"我有万能口袋,我可变出:"+thing;}
}
private void button1_Click(object sender,EventArgs e)
{
MachineCat mcat=new MachineCat("叮当");
StoneMonkey wukong=new StoneMonkey("孙悟空");
{
MachineCat mcat=new MachineCat("叮当");
StoneMonkey wukong=new StoneMonkey("孙悟空");
IChange [] array=new IChange[2];
array[0]=mcat;
array[1]=wukong;
array[0]=mcat;
array[1]=wukong;
//利用多态性实现不同的ChangeThing
MessageBox.Show(array[0].ChangeThing("各种各样的东西!"));
MessageBox.Show(array[1].ChangeThing("各种各样的东西!"));
}
MessageBox.Show(array[0].ChangeThing("各种各样的东西!"));
MessageBox.Show(array[1].ChangeThing("各种各样的东西!"));
}
设计模式380 委托和事件
护眼色度值:
色调85
饱和度90
亮度205