----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
呵呵,三兄弟,其实就是在面向对象这个知识点中,面向对象的三个特征而已。他们分别是封装、继承、多态。为了更系统、更直观的学习三个对象,特地在此总结了一番。
封装。
定义:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:1,将变化隔离。2,便于使用。3,提高重用性。4,提高安全性。
原则:1,将不需要对外提供的内容隐藏起来。2,把属性隐藏,提供公共方法对其访问。
继承。
好处:1,提高了代码的复用性。2,让类与类之间产生关系,提供了另一个面向对象特征的前提。
分类:单继承、多继承。
在java中,java只支持单继承,不直接支持多继承,但保留了多继承机制,进行改良。Java中虽不支持多继承,但只支持多重继承。
Java中父类的由来,其实是多个类不断向上抽取共性内容而来的。
Java中子父类出现后,类中的成员也都有了新的特点。其新特点有:
1,成员变量。
当子父类中出现一样的属性时,子类类型的对象、调用该属性。值是子类的属性。如果想调用父类中的属性值,需要使用一个关键字:super。
this:代表是本类类型的对象引用。
super:代表是子类所属的父类中的内存空间引用。
2,成员函数。
当子类中出现了一模一样的方法时,建立子类对象会运行子类的方法。好像父类中的方法被覆盖掉一样。所以这种情况是函数的另一个特性:覆盖。
3,构造函数。
当子类构造函数运行时,先运行父类的构造函数,因为子类的所有构造函数中的第一行,都隐身着一条语句super()。又因每一个子类构造内第一行都有默认的语句super(),所以子类中所有的构造函数都会默认访问父类中的空参数的构造函数。
super():表示父类的构造函数,并会调用与参数相对应的父类中的构造函数。
在子类对象初始化时,都需要调用父类中的函数,因为子类继承父类,会继承到父类中的数据,所有必须要看父类是如何对自己的数据进行初始化的。
子类在进行对象初始化,先调用父类的构造函数,这就是子类的实例化过程。
如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过super语句指定要访问的父类中的构造函数。如果子类构造函数中用this来指定调用子类自己的构造函数,那么被调用的构造函数也一样会访问父类中的构造函数。
super()和this()
1,两个语句只能有一个定义在第一行,所以只能出现一个。
2,两个语句用在第一行,因为两者都是在调用构造函数,而构造函数是用来初始化,所以初始化的动作要先完成。
当类与类之间存在着所属关系时,才具备了继承的前提。判断所属关系,可以简单看,如果继承后,被继承的类中的功能,都可以被该子类所具备,那么继承成立,如果不是,则不可以继承。不要仅仅为了获取其他类中的已有成员进行继承。
覆盖:
1,子类覆盖父类,要想实现成功覆盖,一定要保证子类的权限大于父类中的方法权限。
2,覆盖时,要么都静态,要么都不静态。
多态。
定义:某一种事物有不同的体现形式。
体现:父类引用或者接口的引用指向了自己的子类对象。
好处:提高了程序的扩展性。
弊端:当父类引用指向了子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有的方法。
前提:1,必须要有关系,比如继承、或者实现。2,通常会有覆盖操作。
思想变化:以前是创建对象并指挥对象做事情。有了多态后,我们可以找到对象的共性类型,直接操作共性类型做事情即可,这样可以指挥一批对象做事情,即通过操作父类或者接口实现。
多态在子父类中的成员上的体现特点:
1,成员变量:在多态中,子父类成员变量同名。
编译时期,参考引用型变量所属的类是否有调用的成员。
运行时期,参考引用型变量所属的类是否有调用的成员。
也就是说:无论编译还是运行,成员变量都是参考引用型变量所属的类中的成员变量。
成员变量-----编译运行都看=左边。
2,成员函数。
编译时期,参考引用型变量所属的类是否有调用的方法。
运行时期,参考的是对象所属的类中是否有调用的方法。
在子父类中,对于一模一样的成员函数,有一个特性:覆盖。
也就是说:成员函数,编译看引用型变量所属的类,运行看对象所属的类。
成员函数-----编译看=左边,运行看=右边。
3,静态函数。
编译时期,参考引用型变量所属的类是否有调用的成员。
运行时期,参考引用型变量所属的类是否有调用的成员。
静态方法,其实不所属于对象,而是所属于该方法中所在的类。
调用静态的方法:引用是哪个类的引用,调用的就是哪个类中的静态方法。
静态函数-----编译运行都看=左边。
总结完了面向对象的三个特征,是不是对学习面向对象很一目了然了呢?呵呵,对吧,嗯嗯,加油!!!