它增加论了程序的可扩展性
比如你要做个篮子放水果,你当然不希望造这样的篮子--苹果篮子,橘子篮子,梨篮子,正常人都会想,麻烦啊,我就造个篮子,什么都能放,干嘛造那么多啊?
回归程序:你造个篮子 basket();参数是水果 fruit,这样你调用的时候就可以这样 basket(fruit f);然后往里放苹果啊,梨啊,什么都行,只要是水果类的子类
好处:这样设计你的程序,等你的参数变了的时候,只要还是水果,你就不用去改程序了,这就是可扩展性的体现
fruit f = apple a
这就是一个多态的应用
多态应用的三个条件:
继承 (apple当然继承了fruit)
子类对象指向父类引用(a是apple的一个对象,f是fruit类父类的一个引用)
重写(就是子类重写父类继承来的方法。父类实现了一个方法,他不一定适合子类,因为如果适合你也就不用重新定义一个类了,用父类就行了。这时就需要去重新写一个方法,实现新的功能)封装:
封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集合在一个个的单元中(我们称之为类)。被封装的对象通常被称为抽象数据类型。
封装的意义:
封装的意义在于保护或者防止代码(数据)被我们无意中破坏。在面向对象程序设计中数据被看作是一个中心的元素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改。
1 保护数据成员,不让类以外的程序直接访问或修改,只能通过提供的公共的接口访问==>数据封装。
2 方法的细节对用户是隐藏的,只要接口不变,内容的修改不会影响到外部的调用者==>方法封装。
3 当对象含有完整的属性和与之对应的方法时称为封装。
4 从对象外面不能直接访问对象的属性,只能通过和该属性对应的方法访问。
5 对象的方法可以接收对象外面的消息。
类成员的访问修饰符:
即类的方法和成员变量的访问控制符,一个类作为整体对象不可见,并不代表他的所有域和方法也对程序其他部分不可见,需要有他们的访问修饰符判断。
权限如下:
访问修饰符
同一个类
同包
不同包,子类
不同包,非子类
private
√
protected
√
√
√
public
√
√
√
√
默认
√
√
继承:
继承主要实现重用代码,节省开发时间。
1、C#中的继承符合下列规则:
继承是可传递的。如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员。Object类作为所有类的基类。
派生类应当是对基类的扩展。派生类可以添加新的成员,但不能除去已经继承的成员的定义。
构造函数和析构函数不能被继承。除此之外的其它成员,不论对它们定义了怎样的访问方式,都能被继承。基类中成员的访问方式只能决定派生类能否访问它们。
派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员。但这并不因为这派生类删除了这些成员,只是不能再访问这些成员。
类可以定义虚文法、虚属性以及虚索引指示器,它的派生类能够重载这些成员,从而实现类可以展示出多态性。
2、new关键字
如果父类中声明了一个没有friend修饰的protected或public方法,子类中也声明了同名的方法。则用new可以隐藏父类中的方法。(不建议使用)
3、base关键字
base 关键字用于从派生类中访问基类的成员:
调用基类上已被其他方法重写的方法。
指定创建派生类实例时应调用的基类构造函数。
多态:
1、“一个接口,多种方法”
同一 *** 作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
多态的三个条件:
a 继承的存在(继承是多态的基础,没有继承就没有多态)
b 子类重写父类的方法(多态下调用子类重写的方法)
c 父类引用变量指向子类对象(子类到父类的类型转换)
重载(overload)和重写(override)是实现多态的两种主要方式。
2、实现多态:
接口多态性。
继承多态性。
通过抽象类实现的多态性。让父类(接口)引用指向子类对象(是自动类型转换), 从而调用子类对象的方法,实现多态性
而把父类对象要赋值给子类对象,需要进行强制类型转换,跟多态性无关。
父类对象要赋值给子类对象,如果不进行强制类型转换,编译会报错。
你写出的代码就是强制类型转换,与多态性无关封装最简单的理解就是包装,把编译的class文件疯封装起来,便于管理,还可以设置密码。
继承是一种关系,比如说你爸和你爷还有你,如果你爷有家产的化,当时是继承给你爸,等到了你爸这里有什么好东西自然也就继承给你了。在java里也是一样的,继承通常用extends来继承。
多态有两种,一重载是“同名不同参”二重写是“子类和父类有完全一样的方法,子类对象调用子类重写的方法”。
接口说白一点就是更方便编程,假如在子类和父类中!!
父类定义的是人类,子类1定义为教师类,子类2定义为学生类,教师有工资,学生却没有,这样就利用到了接口,定义一个接口连接教师类,这样教师就拥有了工资,而学生就没有。同样是使用父类的引用,调用同一个名称的方法,却可以得到不同的调用结果,这就是Java中的多态,即:同一函数,多种形态;
实际上多态包括动态多态和静态多态
静态多态也称为编译时多态,即在编译时决定调用哪个方法;
静态多态一般是指方法重载;
只要构成了方法重载,就可以认为形成了静态多态的条件;
静态多态与是否发生继承没有必然联系。
动态多态也称为运行时多态,即在运行时才能确定调用哪个方法;
形成动态多态必须具体以下条件:
必须要有继承的情况存在;
在继承中必须要有方法覆盖;
必须由基类的引用指向派生类的实例,并且通过基类的引用调用被覆盖的方法;
由上述条件可以看出,继承是实现动态多态的首要前提。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)