1
、“
Ctrl+E+\
”删除空白字符。
2
、多态:为了程序的可扩展性。开放封闭原则:对修改关闭,对扩展开放。
3
、父类不能访问子类特有的方法。
4
、里氏替换原则:当需要一个父类类型对象的时候,可以给一个子类类型对象。
Person p=new Chinese();
当需要子类类型时候,给一个父类是不可以的。把子类类型赋值给父类类型发生了隐式转换,把父类类型变量赋值给子类类型,需要显示类型转换。前提是如果这个父类类型变量
p
中,指向的确实是一个子类对象,则可以显式转换。为了避免显示类型转换报异常,可以先判断下。
chinese cn=p as chinese().
通过
as
进行类型转换时候,如果转换失败也不报异常,只是会返回
null
。推荐使用
as
转换,只进行一次类型验证。
5
、
object
是没有父类的,所以
object
的父类是
null
。
GetType
()是通过反射实现的。
6
、
abstract 抽象,
public abstract void Show();
1抽象成员必须标记为 abstract,抽象方法不能有任何方法体(不能有任何实现)。 2这个类也必须标记为抽象类,抽象成员必须写在抽象类中,不能写在普通类中。 3父类中的抽象成员,子类继承后,必须重写,除非子类也是一个抽象类,可以不重写。抽象成员不能是 private私有的。4 抽象属性没有任何实现(不要与自动属性误解)。 5抽象类不能被实例化(抽象类的作用就是为了继承); 6抽象类中可以包含实例成员。 7抽象类是有构造函数,虽然不能被实例化。 8抽象类就是为了重写→多态(代码重用)。
8
、
如果父类中的方法有默认的实现,并且父类需要被实例化,这时候可以考虑将父类定义成一个普通类,用虚方法来实现多态。如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类。
9
、类中成员如果不写访问修饰符,默认为私有的。
10
、
return
,必须要有变量去接收。
11
、
new
关键字原来隐藏父类的方法。
12
、接口:就是一种规范,协议,约好遵守某种规范就可以写通用的代码。定义了一组具有各种功能的方法。接口名以
I
开头。
public interface IFlyable
{
//
接口中只能包含方法(方法,属性,索引器,事件),接口中的方法不能有任何实现(就行抽象方法一样,直接加一个分号);接口中的成员不能有任何访问修饰符,默认为
public
。接口也不能被实例化。
void Fly();
}
class Person
:
IFlyable
{
}
实现接口的类,必须实现接口中所有
的成员。
13
、接口存在的意义:多态。
14
、
为什么要用接口:1类不能多继承,所以在某种情况下,只能用接口来替代,因为接口可以多实现。2接口的主要目的就是为了多态。3、当一个类同时继承了某个类,并且也实现了某些接口的时候,必须要将继承的类写在第一个,然后再写接口,不能把接口写在前面。
当多个类型,都具有某个或某几个功能时(方法),但是这几个类型又分属于不同的系列(这几个类型没有共同的父类)所以这时,为了实现多态就可以考虑把这几个类型共有的方法提取一个接口中,让这几个类型分别实现该接口。
15
、接口与接口之间的继承。类与接口之间叫实现。建议不要在一个接口中写过多的方法,避免造成接口污染,可以编写多个接口,在每个接口中,分别定义方法。
接口中的所有成员必须都被子类中全部实现。
16
、实现接口的时候不需要
override
关键字,直接写方法就行了。
17
、规范:就是告诉我们要做什么具有什么能力。规范目的就是为了后面的代码实现多态。多态,可以让我们编写通用的代码,提高程序的可扩展性。
抽象类和接口的区别
接口定义类的公共行为,抽象类定义类的公共实现
一个类只能继承自一个类(抽象类),但是可以同时实现多个接口
接口中不能有实现,抽象类中可以有未实现成员也可以有实现的成员
接口中未实现的方法必须在子类中实现,抽象类中未实现的成员必须在子类中重写
好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。
什么时候使用抽象类,什么时候使用接口
抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。
1.飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F22属于飞机抽象类,鸽子属于鸟抽象类。2. 就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口)也可以有门铃(多实现)。门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))。
虚方法和抽象方法的区别
虚方法必须有实现,抽象方法必须没有实现
抽象方法必须在抽象类中声明,虚方法可以出现在抽象类中
抽象方法必须在子类中重写,虚方法可以被重写
实现多态的主要手段:
1.虚方法virtual
2.抽象方法abstract
3.接口。
关于虚方法需要注意的几点:
1.父类中如果有方法需要让子类重写,则可以将该方法标记为virtual
2.虚方法在父类中必须有实现,哪怕是空实现。
3.虚方法子类可以重写(override),也可以不重写。