一.接口
1.接口的特点
1.接口更像是一个完全形态的抽象类(抽象类允许存在非抽象的方法,但是在接口中不允许存在)
2.接口需要一个实现类,其格式为public 类名 implements 接口名() 在实现类中应该重写全部接口中的方法。
3.在接口中定义的成员变量全是常量(无法改变)格式为:public static final 数据类型 变量名
static是为了可以再类中直接引用该变量(接口名.变量名)
2.接口的多实现
1.接口的多实现是接口的最重要的作用,因为类我们是无法多继承的(因为当我们在调用所继承的类中方法时,如果存在相同方法,就会产生安全隐患)接口中的方法全是抽象方法,即时同名,我们也可以在重写方法时写入我么的要求。
2.格式 public 类名 implements 接口名,接口名(){}
3.接口的多实现同时还可以进行类的继承 格式:public 类名 extends 类名 implements 接口名 ,接口名(){}
3.接口的多继承
1.所谓的无法多继承只发生在类中,在接口中是完全允许多继承的,其概念及过程与类的单继承是完全一样的。
2.格式:public 接口名 extends 接口名 ,接口名(){}
4.接口思想
接口的思想其实更像是一个标签,就像是一个人,本来每个人都一样,有着共同的特点,但是当我们给他的身上贴上抓贼的标签之后他就成为了一个民警。这便是这个人与其他人不一样的地方。
5.接口与抽象类的区别
接口与抽象类真的很像啊。。。。但是他们之间也确实是有区别的
接口中规定每一个方法都必须是抽象方法,然而抽象类中却允许非抽象方法的存在,从这个方面说一下我的看法吧
我们都说接口的出现是为了解决类的继承之中会出现的耦合性过高的问题,也就是为了解耦合,但是耦合性从何而来?
在类的继承中我们不是每一个方法都是抽象方法的,而那些不用我们重写的方法在我看来就是耦合性高的原因,因为那些方法不用重写,所以他们在不断地单继承过程中类和类之间会产生很多的相同方法,但是有一些相同的方法又并不是我们所需要的
那为什么不去重写这些相同的方法?
当我们的父类信息量很大时,找出那些我们不需要的方法再去重写它,感觉挺难的。
接口就不一样了,他其实相当于一个额外的东西,就相当于我们的特殊点吧.........而且当我们需要共同点时也可以使用接口的继承,反正我们重写方法的时候是按需要写的。
我们大多是时候应该是考虑使用接口,或者抽象类与接口同时使用比较好
二.多态
1.什么是多态?
1.多态更像是封装,抽象,接口的结合体,具有他们的几乎所有特点
2.多态更像是对于一个是事物做出的共同却又有些不同的应答(好抽象):两个人共同点都是去吃饭,一个人想吃快餐,多态会给你汉堡;一个人想吃中餐,多态会给你烤串。大概就是这个意思了。。。。。共同点是吃饭,但却又确实存在不同点,很灵活是吧。
2.多态的形成条件
1.一定要在子类与父类存在继承关系,或者接口的实现关系的情况下
2.子类要重写方法
3.父类引用子类对象或者接口引用实现类对象
一些不能形成的情况:
1.static修饰的方法这种方法属于类的方法,也就是说这种静态的方法,是在一个类被创造之初便进入静态存储区的,他是不用实例化的,直接类名.方法名就可以直接引用了。况且以private,static修饰的方法是无法参与继承的,所以根本无法重写。
2.final修饰的方法无法被更改,就像常量一样,也不行。
3.protect修饰的也不行只能在本包内被调用意义不大。
3. 多态的分类(还没有学的这么深,就先把其他大神的写一下,学到了就研究)
1、编译时多态,即方法的重载,从JVM的角度来讲,这是一种静态分派(static dispatch)
2、运行时多态,即方法的重写,从JVM的角度来讲,这是一种动态分派(dynamic dispatch) //转自五月的仓颉
4.多态的定义(升高与降级)
1.对于多态的升高(基本形式):在网课上看的,挺有趣的解释:这就像是化妆,女生想要整容成某个明星,这就是一种升高,这种升高是有局限性的,其局限于相同性,因为你要和那个明星整的一样嘛。。整完事了,你若想要完全像哪个明星,就要不断地模仿,在模仿,使你们之间的区别不断减少,然后你就成了他了。这就是升高,缺点就是不太灵活。
具体体现在:
当我们形成多态后,我们在测试类中调用变量时计算机是以父类中的该变量为准的,若是我们在测试类中调用了一个父类中没有而子类中存在的变量时,会报错;同时当我们在调用方法时同样是以父类中为准,同时以子类中重写的方法为方法体调用的。
格式:父类(接口) 对象1=new 子类(实现类)();
2.对于多态的降级:就是还原,类比上面的,在做回自己这个个体,而不用去刻意的模仿别人了。这就允许了一定的共同点,比如说都是女生;不同点,个头不一样等等
具体是:这其实就像是我们正常的实例化对象了,但是因为我们已经升高过了,所以他和正常实例化的格式不一样,需要强制转换一下
格式:子类 (实现类) 对象2=(子类或实现类) 对象一;
5.instanceof关键字
用于判断是否是该类的对象
格式 a instanceof 类名; 多用于if语句,因为其返回值是boolean类型的
三.总结
面向对象的三个特点终于总结完了......开始异常类了。还是学的太快了,像是在赶进度(确实是...),记得详细一些,以后也好复习吧。