「java抽象类多继承」一个类可以继承几个抽象类

博主:adminadmin 2022-12-16 19:51:09 71

今天给各位分享java抽象类多继承的知识,其中也会对一个类可以继承几个抽象类进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java中抽象类和接口的区别?

java中对的抽象类和接口对的区别:

抽象类:

抽象类内允许有普通变量和普通方法;

抽象类必须有abstract关键字;

抽象类内可以没有抽象方法,但不能实例化;

抽象类内有抽象方法的一定是抽象类;

抽象类不能被实例化,但是有构造方法(派生类可以扩展)。

接口:

接口只声明,没有方法体,如:public abstract void func();

接口内定义的变量都默认是public static final ,必须被显示初始化;

接口没有构造方法,不能实例化;

实现接口的类要实现所有的抽象方法,否则该类就必须声明为抽象类,加上 abstract关键字;

.接口不可以实现接口,所有接口都是抽象方法,但是接口支持多继承。

接口是否可继承接口(java)

Java语法中,接口可以继承接口,抽象类可以实现接口,抽象类可以继承实体类。

Java语法中,使用interface定义一个接口,使用class定义一个类,使用关键字abstract+class定义一个抽象类。以下分别对这3个知识点进行解析:

1、接口可以继承接口

接口可以多继承接口,例如:Interface1ExtendsInterface2,Interface3,Interface4??

代码示例为:

publicinterfaceInterface1{

publicvoidmethod1();

}

publicinterfaceInterface2extendsInterface1{

publicvoidmethod2();

}

publicinterfaceInterface3extendsInterface1,Interface2{

publicvoidmethod3();

}

2、抽象类可以实现接口

抽象类实现接口时,可以完全重写或覆盖接口中的方法,也可只重写接口中的部分方法。

代码示例为:

publicinterfaceInterfaceA{

publicvoidmethod1();

publicvoidmethod2();

publicvoidmethod3();

}

abstractclassClassAimplementsInterfaceA{

publicvoidmethod1(){}

publicvoidmethod2(){}

}

3、抽象类可以继承实体类

抽象类可以继承实体类,但前提是实体类必须有明确的构造函数。

代码示例为:

classEntityA{

publicEntityA(){

//构造函数

}

publicvoidhelloWorld(){

System.out.println("hello");

}

}

abstractclassClassAextendsEntityA{}

扩展资料:

1、Java继承或实现接口时需要遵循的原则:

(1)类优先于接口。如果一个子类继承的父类和接口有相同的方法实现。那么子类继承父类的方法。

(2)子类型中的方法优先于父类型中的方法。

(3)如果以上条件都不满足,则必须显示覆盖/实现其方法,或者声明成abstract。

2、Java实现多继承的方式:

(1)Java中一个类不能继承多个具体class。 

(2)一个类只可继承自一个具体class,但可实现多个接口。interface不涉及到实现细节,不与任何存储空间有关连。新类可继承自一个具象class,其余继承都得是interfaces。

(3)outerclass不可继承自多个具体class,可在其内部设多个innerclass,每个innerclass都能各自继承某一实现类。innerclass不受限于outerclass是否已经继承自某一实现类。 

(4)innerclass可以说是多重继承问题的完整解决方案。一个类不能继承自多个一般类。但我们可以让其内部的多个innerclass各自继承某一实现类达到类似的目的。

参考资料来源:Java官方文档-接口(interface)

java 可不可以继承多个类?

1,java 是不可以继承多个类,java是单继承的,但是java 通过 接口可以实现多继承

2,也就是说, 一个java类只能继承一个父类, 但可以有多个接口.

3,若子类继承的父类中拥有相同的成员变量,子类在引用该变量时将无法判别使用哪个父类的成员变量。如:

public class classA // 父类 classA

{

private int num = 0;

}

public class classB // 父类 classB

{

private int num = 1;

}

public class classC extends classA,classB // 子类 classC 继承于 classA 和 classB

{

public static void main(String [] args)

{

classC obj = new classC();

obj.print(); // 调用父类成员变量 num , 那 num 等于 0 还是 1 ?

}

public void print()

{

System.out.println(super.num);

}

}

2.若一个子类继承的多个父类拥有相同方法,同时子类并未覆盖该方法(若覆盖,则直接使用子类中该方法),那么调用该方法时将无法确定调用哪个父类的方法。如:

public class classA // 父类 classA

{

public void fun()

{

System.out.print("hello");

}

}

public class classB // 父类 classB

{

public void fun()

{

System.out.print("hello");

}

}

public class classC extends classA,classB

{

public static void main(String [] args)

{

classC t = new classC();

t.print();

}

public void print()

{

super.fun(); // 调用父类中 fun 方法,但由于classA、classB都有fun()方法,将无法确定使用

// 哪个父类中的方法

}

}

因此,Java仅允许单继承,即一个子类只能继承于一个父类。但为了拓展子类的功能,Java使用接口以克服不使用多继承带来的不足。

接口是一个特殊的抽象类,接口中成员变量均默认为 static final 类型,即常量,且接口中的方法都为抽象的,都没有方法体。

资料来源:

为什么抽象类不能多继承

...因为java就是这么设定的..也许是因为抽象类还不够抽象..这样也更符合个人理解,一个人只能有一个爹..

另外,java中的类允许实现多个接口(也许是因为接口相对于抽象类,更加抽象)..

java类是否可以多继承,怎么实现多继承?

在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解。

刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有方法名,没有方法体的东西,我实现它又有什么用呢?我从它那什么也得不到,除了一些方法名,我直接在具体类里加入这些方法不就行了吗?

为什么一定要有抽象类这个概念?为什么就不能把这个父类写成一个具体的类,子类再继承它不就可以了吗?何必弄一个抽象类出来,还要弄一些没有方法体的抽象方法,弄得又象接口又象类的,让人捉摸不定。

当我开始学习java设计模式,真正走进面向对象设计的大门之后,我才发现,自己对面向对象设计的理解原来是那么的片面,那么的肤浅,根本就没有真正理解面向对象思想的精髓,在某一种程度上还受着面向过程的影响,以为弄出了一个个类,就算是面向对象了,而其实还是被过程所驱使着。

我还是说说我现在对面向对象思想的理解吧,不一定正确全面,但我想应该还算是比以前略有进步吧。

面向对象思想,我觉得最关键的就是抽象。

一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体的业务实现了。当你需要再开发另一个相近的项目时,你以前的抽象层说不定还可以再次利用呢,面对对象的设计,复用的重点其实应该是抽象层的复用,而不是具体某一个代码块的复用,是不是一下子感觉自己对复用理解的高度又上升了一层?^_^

说到了抽象,我就不能不提到曾让我头痛的Java接口和Java抽象类了,这也是本文我想说的重点。

既然面向对象设计的重点在于抽象,那Java接口和Java抽象类就有它存在的必然性了。

Java接口和Java抽象类代表的就是抽象类型,就是我们需要提出的抽象层的具体表现。OOP面向对象的编程,如果要提高程序的复用率,增加程序的可维护性,可扩展性,就必须是面向接口的编程,面向抽象的编程,正确地使用接口、抽象类这些太有用的抽象类型做为你结构层次上的顶层。

Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才是它们的最佳位置呢?把它们比较一下,你就可以发现了。

1、Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。

如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点。

2、一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。

在这一点上,Java接口的优势就出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。

3、从第2点不难看出,Java接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为。

4、结合1、2点中抽象类和Java接口的各自优势,具精典的设计模式就出来了:声明类型的工作仍然由Java接口承担,但是同时给出一个Java抽象类,且实现了这个接口,而其他同属于这个抽象类型的具体类可以选择实现这个Java接口,也可以选择继承这个抽象类,也就是说在层次结构中,Java接口在最上面,然后紧跟着抽象类,哈,这下两个的最大优点都能发挥到极至了。这个模式就是“缺省适配模式”。

在Java语言API中用了这种模式,而且全都遵循一定的命名规范:Abstract +接口名。

Java接口和Java抽象类的存在就是为了用于具体类的实现和继承的,如果你准备写一个具体类去继承另一个具体类的话,那你的设计就有很大问题了。Java抽象类就是为了继承而存在的,它的抽象方法就是为了强制子类必须去实现的。

使用Java接口和抽象Java类进行变量的类型声明、参数是类型声明、方法的返还类型说明,以及数据类型的转换等。而不要用具体Java类进行变量的类型声明、参数是类型声明、方法的返还类型说明,以及数据类型的转换等。

我想,如果你编的代码里面连一个接口和抽象类都没有的话,也许我可以说你根本没有用到任何设计模式,任何一个设计模式都是和抽象分不开的,而抽象与Java接口和抽象Java类又是分不开的。

理解抽象,理解Java接口和抽象Java类,我想就应该是真正开始用面向对象的思想去分析问题,解决问题了吧。

java抽象类多继承的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于一个类可以继承几个抽象类、java抽象类多继承的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-16,除非注明,否则均为首码项目网原创文章,转载请注明出处。