
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(){
Systemoutprintln("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)
一、两者相同点
1、不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
2、抽象类里的抽象方法必须全部被子类所实现,子类不能全部实现父类抽象方法,那么该子类还只能是抽象类。一个类实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
二、两者不同点
1、默认的方法实现
抽象类可以有默认的方法实现;接口,Java8规定可以为接口提供默认实现的方法并且不用强。
2、实现
制子类来重写子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要重写抽象类中的抽象方法;接口子类使用关键字implements 来实现接口,它需要重写接口中没有默认。
3、构造器
抽象类可以有构造器,接口不能有构造器。
4、与正常Java类的区别
除了不能实例化抽象类之外,和普通Java类没有任何区别;接口是完全不同的类型外。
5、访问修饰符
抽象方法可有publicprotected和default、abstract修饰符。不能用privatestaticsynchronize、 native 修饰。
接口属性默认修饰符是publicstatic final (必须赋初值) ,方法默认修饰符是publicabstract Java8 开始出现静态方法,多加static关键字。
6、main方法
并且可以运行它;接口没有main方法,因此不能运行它。
7、多继承
抽象类可以继承一个类和实现多个接口;接口只可以继承一个或多个接口。
抽象类的运用意义
在面向对象方法中,抽象类主要用来进行类型隐藏。构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。
这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以 *** 作一个抽象体。
由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。
为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。
什么是抽象类和抽象方法?
抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract。 在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract。 抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。抽象类本身不具备实际的功能,只能用于派生其子类。抽象类中可以包含构造方法,但是构造方法不能被声明为抽象。 抽象类不能用final来修饰,即一个类不能既是最终类又是抽象类。 abstract不能与private、static、final、native并列修饰同一个方法。 程序举例:abstract class Animal 定义抽象类 abstract void eat(); 定义抽象方法}class Horse extends Animal 定义继承Animal的子类 void eat() 重写父类的抽象方法 }class Dog extends Animal void eat() }class test}运行结果: 马吃草料! 狗吃骨头!
什么叫JAVA的抽象方法?
抽象方法定义在抽象类或接口中,它只有方法的声明没有实现例如;
public abstract class AAA{
public abstract voi弧 test();
}
上面的test方法就是抽象方法,他后面直接写一个;号不能带{}
抽象类和抽象方法起什么作用
实现多态啊
最简单的一个作用,实现模板
所有继承抽象类的子类,必须强制实现抽象类的抽象方法如果没有抽象方法,则子类可有,可没有该方法定义一个抽象方法后,所有子类就必须实现了
另外,抽象类通常用于指向子类的实例场
比如:
抽象类 实例 = new 子类();
实例抽象方法();
如果你不定义抽象方法,如何使用子类的方法呢
Java中什么叫做抽象方法只需声明,而不需实现?
实现是针对其子类:例如
public abstract class Father{
只申明,不实现
public abstract void show();
}
public class Child extends Father{
实现
public void show{
Systemoutprintln("show method!");
}
}
实现了方法,不觉得么?
你看父类的方法
public abstract void show();
只是做了声明,并没有方法体。
在其子类中:
public void show{
Systemoutprintln("show method!");
}
实现了方法内部功能,我只是输出一句话,当然你可以做其他功能。
抽象方法和类是拿来干什么
(关键字abstract)抽象类是为继承而定义的,抽象类中不一定有抽象方法,但有抽象方法一定是抽象类。
抽象类中可以定义构造函数,但是不能使用关键字new 创建其对象。
如果某个类继承于抽象类,应将父类的抽象方法都覆盖,否则子类也是一个抽象类。覆盖实现则可以创建子类的对象。
静态方法和final方法都不能声明为抽象。
数据抽象方法的定义
数据类型是和数据结构密切相关的一个概念。它最早出现在高级程序设计语言中,用以刻划程序中 *** 作对象的特性。在用高级语言编写的程序中,每个变量、常量或表达式都有一个它所属的确定的数据类型。类型显式地或隐含地规定了在程序执行期间变量或表达式所有可能的取值范围,以及在这些值上允许进行的 *** 作。因此,数据类型(DataType)是一个值的 和定义在这个值集上的一组 *** 作的总称。 在高级程序设计语言中,数据类型可分为两类:一类是原子类型,另一类则是结构类型。原子类型的值是不可分解的。如C语言中整型、字符型、浮点型、双精度型等基本类型,分别用保留字int、char、float、double标识。而结构类型的值是由若干成分按某种结构组成的,因此是可分解的,并且它的成分可以是非结构的,也可以是结构的。例如,数组的值由若干分量组成,每个分量可以是整数,也可以是数组等。在某种意义上,数据结构可以看成是“一组具有相同结构的值”,而数据类型则可被看成是由一种数据结构和定义在其上的一组 *** 作所组成的。 抽象数据类型 抽象数据类型(AbstructDataType,简称ADT)是指一个数学模型以及定义在该模型上的一组 *** 作。抽象数据类型的定义取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部的使用。 抽象数据类型和数据类型实质上是一个概念。例如,各种计算机都拥有的整数类型就是一个抽象数据类型,尽管它们在不同处理器上的实现方法可以不同,但由于其定义的数学特性相同,在用户看来都是相同的。因此,“抽象”的意义在于数据类型的数学抽象特性。 但在另一方面,抽象数据类型的范畴更广,它不再局限于前述各处理器中已定义并实现的数据类型,还包括用户在设计软件系统时自己定义的数据类型。为了提高软件的重用性,在近代程序设计方法学中,要求在构成软件系统的每个相对独立的模块上,定义一组数据和施于这些数据上的一组 *** 作,并在模块的内部给出这些数据的表示及其 *** 作的细节,而在模块的外部使用的只是抽象的数据及抽象的 *** 作。这也就是面向对象的程序设计方法。 抽象数据类型的定义可以由一种数据结构和定义在其上的一组 *** 作组成,而数据结构又包括数据元素及元素间的关系,因此抽象数据类型一般可以由元素、关系及 *** 作三种要素来定义。 抽象数据类型的特征是使用与实现相分离,实行封装和信息隐蔽。就是说,在抽象数据类型设计时,把类型的定义与其实现分离开来。
Java父类中抽象方法有什么用?
楼主好好把继承和多态的概念理解下吧!
继承,是对有着共同特性的多类事物,进行再抽象成一个类。这个类就是多类事物的父类。父类的意义在于可以抽取多类事物的共性。
多态,把子类对象主观的看作是其父类型的对象,那么父类型就可以是很多种类型。
例如父类Person(人) 子类 Students(学生) 子类Teacher(教师)
珐类中有抽象方法 void work();子类分别实现
Person p1 = new Student();
Person p2 = new Teacher();
p1work();
p2work();
楼主自己试下什么结果!
如果你父类中不定义抽象方法或方法的话,你看看 还能够p1work();这样调用吗?答案是否定的。
抽象类中的方法都必须是什么
1抽象类与抽象方法的关系是:抽象方法必须在抽象类中,如果抽象方法不在抽象类中,则会编译报错,这个是规定的。
2抽象类中的方法不一定要必须是抽象方法,可以有抽象方法,和非抽象方法。其中非抽象方法,往往都是抽象类的所有子类所具有的,而抽象方法则由具体的不同子类实现不同的方法
所以综上所述,这句话是错误的。
另外题外话。我是这么理解抽象类的。
水果就是一个抽象类。如果我叫你拿出一个水果的实例,对象出来,你肯定拿不出一个叫水果的实例,对象。你只是能拿出比如苹果,香蕉等水果的子类实例。
水果中的非抽象方法类似于苹果,香蕉都有皮,都有水(所以这些不用我们去实现)
抽象方法为:水果的形状(所以我们就要在苹果,香蕉中实现不同的形状方法)
纯手打~~忘采纳
java抽象类中没有抽象方法有什么用
就是单纯的不想让你创建这个类的实例,所以就把这个类给抽象起来。
Java怎么构建抽象类,抽象类的概念是什么?
普通类就是一个完善的功能类,可以直接产生对象并且可以使用,里面的方法都是带有方法体的,
而抽象类之中最大的特点是包含了抽象方法,而抽象方法是只声明而未实现(没有方法体)的方法,
而抽象方法定义的时候要使用abstract关键字完成,而抽象方法一定要在抽象类之中。
抽象类要使用abstract关键字声明。
范例:定义一个抽象类
abstract class A {
private String = "Hello World" ;
public void print() {
Systemoutprintln() ;
}
public abstract void get() ; 只声明没有方法体
}
抽象类的特点:
1、抽象类的方法可以是抽象的,也可以是不抽象的。
2、抽象类的方法可以全是抽象的,也可以全是不抽象的。
3、有抽象方法的类必须是抽象类,或者是接口(但是接口的方法定义必须是public static abstract 修饰)。
4、子类继承抽象类,必须实现抽象类的所有抽象方法。
5、抽象类不能被实例化,没有构造函数。
6、子类中的抽象方法不能与父类的抽象方法同名。
7、抽象类的默认属性修饰符是public abstract。
8、抽象类的属性不能定义成静态的。
9、如果抽象类的抽象方法不被重写,那么子类也必须是抽象类。
两个问题,一一作答。
1 ,在JAVA的抽象类中,可以写带参数的构造方法。
2,如果这个抽象类被继承,在子类中可以用super调用这个构造方法
俗话说 实践出真知 我也是刚刚在Eclipse上写的 呵呵 回答完毕
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)