上次讲到了抽象。
其实抽象这里还是很有说头的。
抽象类的子类必须实现抽象类里面的抽象方法。
很好理解嘛~~~~不是说过抽象方法必须在抽象类里面吗,如果子类不是抽象类,继承“抽象方法”肯定不行,所以要么你实现它,要么你变成抽象类。
继承里面还有个好玩的叫做上转型对象。
说白了,就是父亲定义,儿子实例化。
如下
class Fruit{
int mass;
void wayofeating(){
}
}
class Apple extends Fruit{
Apple(int mass) {
super(mass);
}
int mass;
String name;
void wayofeating(){
System.out.print("削皮吃");
}
String colar;
}
public class H3 {
public static void main (String[] args){
Fruit b=new Fruit(23);
Fruit c=new Apple(23);
Apple d=new Apple(23);
b.mass
b.waysofeating();
c.mass;
c.waysofeating();
d.color;
}
}
定义了一个水果类,加一个苹果类。
苹果类继承水果类。
首先我们看到,如果父亲有构造方法,那么儿子的构造方法必须跟父亲一样。
super 超级的,就是指父亲,父类也叫超类。
super(mass);就是把mass参数传入父类之中,用父类的方法构造、
this 就是专门指这个子类。
其次,我们看到,bcd三者比较来看,b里面只能找到一个mass一个wayofeating,c也只能找到这么多,而d无疑是可以找到苹果里面的所以变量跟方法的。
但是bc又有不同,程序运行,b.wayofeating 啥也没有,而c.wayofeating 给出了吃的具体方法,那就是削皮……
所以,所谓的上转型很简单嘛,就是父亲叫你干什么,怎么去干,那不是你自己的事情吗?
这就是父亲定义,儿子实例化!
你说空气钱包还不够抽象?必须啥也没有是吧!
行!直接给一个钱包的定义!
“只有能装钱的东西叫做钱包”,但是怎么装?用什么材质?一概不说。
这种真.啥也没有的抽象类,就叫做接口。
interface
我们可以这样。
interface wallet{
void wayofopening();
}
接口,大家顾名思义,是不是想到了USB接口?
你的USB接口是深深的埋在计算机内部还是public(后面会细细分析)公开的?
自然是公开的。
那么,是可以随意改变接口参数final(后面也会提到)的还是不能改变的?
当然是不能随意改变的。
我用这个接口干什么(比如传数据或者给手机充电啦)是个人的事情,但是确实不能更改其中的参数(接口大小,接口的与插头的接触面积)。
当然,接口的继承不能叫继承了,叫implement,名词工具,动词贯彻实行。
子类 implement了接口之后,其中的抽象方法也是必须实现的,并且要public!!
java里面其实是去除了多继承的概念的,就是一个子类不能有多个父类。
但是可以有多个接口。
你可以这么理解,父类里面有各种不同的成员方法跟变量,要是两个父类都拥有相同的某个变量或者方法,在继承的时候,计算机是不是还得纠结子类到底要用谁的变量跟方法(这里指子类没有进行方法重写)。
你先天性的知道都一样,用哪个都无所谓,可是计算机“笨”得很,觉得来自两个地方是不一样的两个东西,但是明明觉得又一样,他就开始矛盾了。
所以,假如要多继承,你是不是还得帮助计算机“排忧解难”?规范一下各个父亲变量或者方法,让他们不冲突?
这么一想,++!
到底是我服务你还是你服务我?
java是为了追求更简单高效的一门语言,面想对象贴近生活,可不是面向过程。
所以,这里就不用多继承了。
那多接口又是怎么回事?
嘿嘿!都说了这都是接口里面只有抽象方法,你不管哪个继承了不都得在子类(另外,接口的子类有个专门名词叫做实现类)里重写?不还都是得用我子类自己写的方法?
所以嘛,先扒拉下来,然后自己在把两边打服气!这波请问子类在第几层?
那又有人问,那我搞个抽象类作为子类,也不具体实现方法,那计算机还不是会迷糊?到底选哪个继承?为啥到了接口就又可以了?
我想,那你能保证父类里面没一个相同的成员变量?变量总不能重写吧?而接口可以!大家注意,接口里面的变量其实都是默认加了public static final的常量!要么完完全全相同,要么就是两个完全不同的东西,那继承了,又有什么关系呢。
这就是我大概的思维构想了。
另外,其实实现多继承的方法很多,我现在好多也不会。
类比是为了说明不是为了说理,因为这个道理本来就是对的,所以我类比一下就可以更好理解,无非就是构建一个属于自己的模型,有些地方可能有错,大家看到就指出一下,我也好修改。
还有,独属于接口的上转型对象,就叫做接口回调。
好了,今天就讲这么多了,改日再见,See you ~~~