本篇文章给大家谈谈子类实现接口对象实例化,以及java接口可以实例化对象?对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
今天给各位分享子类实现接口对象实例化的知识,其中也会对java接口可以实例化对象?进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
java 利用对象多态性给接口实例化,用子类对象去实例化父类接口
首先 A 为父类并且是接口
子类实现接口对象实例化,那么如果B类继承A类的话,B类必须为interface(也为接口),
如果B非要 继承A类的话,就是所说的接口的实现用implements,接口中如果有私有的函数声明,那你在写这个函数还有什么意义吗
子类实现接口对象实例化?所有new对象的时候 A a = new B(); 这是多态的体现
为什么要子类对象去实例化父类接口,这样有什么好处?为什么不用子类对象直接实例化子类?
这个就是java的魅力所在,多态性,不知道你知道不知道。
这样做可以调用父类的方法,因为父类很多方法都是私有的,子类无法使用。
另一点是多态可以减少代码的重复性,比如A类父类,B、C、D分别继承A,那么这时候有一个方法是public void getTitle(A a){},这时候这里的参数是A类型的,因为多态这里调用的时候,getTitle(B),getTitle(C),getTitle(D),都是正确的。增加了代码的可重复性,减少代码复杂度。
子类对象的实例化过程
对于许多Java老手来说,子类对象的实例化过程也不见得非常清楚,你可能并不需要完全了解子类对象的实例化过程,但了解后还是有好处的。对象中的成员变量的初始化是按下述步骤进行的:1).分配成员变量的存储空间并进行默认的初始化,就是用new关键字产生对象后,对类中的成员变量按第三章的表3.1中的对应关系对对象中的成员变量进行初始化赋值。2).绑定构造方法参数,就是new Person(实际参数列表)中所传递进的参数赋值给构造方法中的形式参数变量。3).如有this()调用,则调用相应的重载构造方法(被调用的重载构造方法又从步骤2开始执行这些流程),被调用的重载构造方法的执行流程结束后,回到当前构造方法,当前构造方法直接跳转到步骤6执行。4).显式或隐式追溯调用父类的构造方法(一直到Object类为止,Object是所有Java类的最顶层父类,在本章后面部分有详细讲解),父类的构造方法又从步骤2开始对父类执行这些流程,父类的构造方法的执行流程结束后,回到当前构造方法,当前构造方法继续往下执行。5).进行实例变量的显式初始化操作,也就是执行在定义成员变量时就对其进行赋值的语句,如:public Student extends Person{String school = ”it315”;// 显式初始化……}将“it315”赋值给school成员变量。6).执行当前构造方法的方法体中的程序代码,如public Student extends Person{public Student(String name,int age,String school){super(name,age);this.school=school;}}这一步将执行this.school=school;这条语句,其中用到的super()或this()方法调用语句已在前面的步骤中执行过,这里就不再执行了。注意区别刚才所说的this()方法调用语句与this.school=school的区别,前者指调用其他的构造方法,后者是一个普通的赋值语句。为了便于读者直观地看到子类对象的实例化过程,我将上面的流程用图4.1进行了重复描述。图4.1回过头来想一想:1).为什么super(…)和this(…)调用语句不能同时在一个构造函数中出现?2).为什么super(…)或this(…)调用语句只能作为构造函数中的第一句出现?对照对象初始化实例变量过程,我们就发现这两种情况都违背上面的过程,所以读者应该明白上面两个问题的原因了。
在java中实例化一个子类对象赋给父类对象引用或一个实现了接口的类的对象赋给接口的引用,有什么好处?
这个问题不难!这是多态的一种应用:
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。
举个例子:从一个基类中派生,响应一个虚命令,产生不同的结果。
比如从某个基类继承出多个对象,其基类有一个虚方法Tdoit,然后其子类也有这个方法,但行为不同,然后这些子对象中的任何一个可以赋给其基类的对象,这样其基类的对象就可以执行不同的操作了。实际上你是在通过其基类来访问其子对象的,你要做的就是一个赋值操作。
使用继承性的结果就是可以创建一个类的家族,在认识这个类的家族时,就是把导出类的对象当作基类的对象,这种认识又叫作upcasting。这样认识的重要性在于:我们可以只针对基类写出一段程序,但它可以适应于这个类的家族,因为编译器会自动就找出合适的对象来执行操作。这种现象又称为多态性。而实现多态性的手段又叫称动态绑定(dynamicbinding)。
简单的说,建立一个父类的对象,它的内容可以是这个父类的,也可以是它的子类的,当子类拥有和父类同样的函数,当使用这个对象调用这个函数的时候,定义这个对象的类(也就是父类)里的同名函数将被调用,当在父类里的这个函数前加virtual关键字,那么子类的同名函数将被调用。
例子在C++中:
classA{
public:
A(){}
virtualvoidfoo(){
coutfoo();
if(a!=NULL)
deletea;
return0;
}
这将显示:
ThisisB.
如果把virtual去掉,将显示:
ThisisA.
前面的多态实现使用抽象类,并定义了虚方法.
在java中:
多态,是面向对象的程序设计语言最核心的特征。多态,意味着一个对象有着多重特征,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。从程序设计的角度而言,多态可以这样来实现(以java语言为例):
publicinterfaceParent{
publicvoidsimpleCall();
}
publicclassChild_AimplementsParent{
publicvoidsimpleCall(){
//具体的实现细节;
}
}
publicclassChild_BimplementsParent{
publicvoidsimpleCall(){
//具体的实现细节;
}
}
//当然还可以有其他的实现
然后,我们就可以看到多态所展示的特性了:
Parentpa=newChild_A();
pa.simpleCall()则显然是调用Child_A的方法;
Parentpa=newChild_B();
pa.simpleCall()则是在调用Child_B的方法。所以,我们对于抽象的父类或者接口给出了我们的具体实现后,pa可以完全不用管实现的细节,只访问我们定义的方法,就可以了。事实上,这就是多态所起的作用,可以实现控制反转这在大量的J2EE轻量级框架中被用到,比如Spring的依赖注射机制。
关于子类实现接口对象实例化和java接口可以实例化对象?的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
子类实现接口对象实例化的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java接口可以实例化对象?、子类实现接口对象实例化的信息别忘了在本站进行查找喔。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~