Ⅰ java接口是否可以有实现方法
不一定,抽象类实现某个接口,可以不实现所有接口的方法,可以由它的子类实现。
比如
1
2
3
4
5
6
public
interface
A
{//定义一个接口
public
void
show();//定义一个接口方法
}
public
abstract
class
AExtend
implements
A{//抽象类实现接口A,但可以不实现show方法,由子类再去实现
}
Ⅱ java中判断一个对象是否实现了某个接口
/*************************************************************************** * 判断对象o实现的所有接口中是否有szInterface * 2008-08-07 修正多继承中判断接口的功能, * 以及修正接口继承后的判断功能 * package test; * * public interface ITest extends Serializable * public class Test1 implements ITest * public class Test2 extends Test1 * public class Test3 extends Test2 * * isInterface(Test3.class, "java.io.Serializable") = true * isInterface(Test3.class, "test.ITest") = true * @param c * @param szInterface * @return */ public boolean isInterface(Class c, String szInterface) { Class[] face = c.getInterfaces(); for (int i = 0, j = face.length; i < j; i++) { if(face[i].getName().equals(szInterface)) { return true; } else { Class[] face1 = face[i].getInterfaces(); for(int x = 0; x < face1.length; x++) { if(face1[x].getName().equals(szInterface)) { return true; } else if(isInterface(face1[x], szInterface)) { return true; } } } } if (null != c.getSuperclass()) { return isInterface(c.getSuperclass(), szInterface); } return false; }
Ⅲ java如何判断一个类是否实现了某个接口
Class中有个方法 public native boolean isAssignableFrom(Class<?> cls)用来判断子类是否继承于父类的或者父接口的。
你会这样子写:
Class clazz = ....;
clazz.isAssignableFrom(子类名称);返回true说明是挂号里的类的父类或父接口。
clazz.isAssignableFrom(子类名称)里的子类名称跟版本有关,好像是1.5以上的JDK这里的子类名称都是使用的泛型编程。即传的传数是
class<T> 类型的,你用的时候自己斟酌下版本问题。
而常用的instanceof(class ..)是指该实例是否属于挂号中的类的父类的一个实例。
如上面的例子:
class A{
}
public class B extends A{
public static void main(String[] args){
Class clazz = B.class;
Class class1 = A.class;
System.out.println(class1.isAssignableFrom(clazz));
if(class1.isAssignableFrom(clazz)){
System.out.println("A是B的父类");
}else{
System.out.println("A不是B的父类");
Ⅳ 接口是否可继承接口(java)
Java语法中,接口可以继承接口,抽象类可以实现接口,抽象类可以继承实体类。
Java语法中,使用interface定义一个接口,使用class定义一个类,使用关键字abstract + class定义一个抽象类。以下分别对这3个知识点进行解析:
1、接口可以继承接口
接口可以多继承接口,例如:Interface1 Extends Interface2, Interface3, Interface4……
代码示例为:
public interface Interface1 {
public void method1();
}
public interface Interface2 extends Interface1 {
public void method2();
}
public interface Interface3 extends Interface1, Interface2 {
public void method3();
}
(4)java是否实现接口扩展阅读:
1、Java继承或实现接口时需要遵循的原则:
(1)类优先于接口。 如果一个子类继承的父类和接口有相同的方法实现。 那么子类继承父类的方法。
(2)子类型中的方法优先于父类型中的方法。
(3)如果以上条件都不满足, 则必须显示覆盖/实现其方法,或者声明成abstract。
2、Java实现多继承的方式:
(1)Java中一个类不能继承多个具体class。
(2)一个类只可继承自一个具体 class,但可实现多个接口。 interface不涉及到实现细节,不与任何存储空间有关连。新类可继承自一个具象class,其余继承都得是interfaces。
(3)outer class不可继承自多个具体class,可在其内部设多个inner class,每个inner class都能各自继承某一实现类。inner class不受限于outer class是否已经继承自某一实现类。
(4)inner class可以说是多重继承问题的完整解决方案。一个类不能继承自多个一般类。但我们可以让其内部的多个inner class各自继承某一实现类达到类似的目的。
Ⅳ java中可否多个类实现一个接口
abstract
class和interface是Java语言中对于抽象类定义进行支持的两种机制。它们之间区别:
接口是公开的,里面不能有私有的方法或变量,而抽象类是可以有私有方法或私有变量的;
代码演示:
接口A
public
interface
A
{
public
abstract
void
play()
;
public
abstract
void
beFriendly();
}
接口B
public
interface
B
{
public
abstract
void
play()
;
public
abstract
void
beFriendly();
}
一个类实现多个接口@Service("weixinPay")
public
class
WeixinPay
implements
Pay{
@Overrid
public
Object
pay(Map<String,
Object>
map){
return
"weixinpay";
}
}
接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量;
实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现;
接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现;
接口可以实现多重继承,而一个类只能继承一个超类;
(5)java是否实现接口扩展阅读:
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。
功能
在Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类型,参数的名字以及所抛出来的异常。在Java编译器检查方法的重载时,会根据这些条件判断两个方法是否是重载方法。但在Java编译器检查方法的置换时,则会进一步检查两个方法(分处超类型和子类型)的返还类型和抛出的异常是否相同。
接口实现和类继承的规则不同,为了数据的安全,继承时一个类只有一个直接父类,也就是单继承,但是一个类可以实现多个接口,接口弥补了类的不能多继承缺点,继承和接口的双重设计既保持了类的数据安全也变相实现了多继承。
Ⅵ java,接口能实现接口吗
不能,因为接口的方法体是没有实现的,但继承接口的子类必须实现接口中的方法,因此接口本身不能实现方法,而又必须实现继承的接口的方法,这是自相矛盾的。当然你可以在方法声明中调用接口,也就是说接口是不能继承接口的,也不能实现接口,只能在方法声明中调用接口
Ⅶ 用Java怎么样实现接口
我给你实现了一个如下:package greatwqs.myinterface;public interface MyInterface {
/**
* 展示方法
*
*/
public void showFun();
/**
* 得到数据
* @return
*/
public String getData();
/**
* 得到此函数的方法名
* @return
*/
public String getFunName();}
----------------------------------------实现如下:package greatwqs.impl;import greatwqs.myinterface.MyInterface;public class InterfaceImpl implements MyInterface { /**
*
* 得到数据
* @return
*/ public String getData() {
return "greatwqs";
} /**
* 得到此函数的方法名
*/
public String getFunName() {
return "getFunName";
} /**
* 展示方法
*
*/
public void showFun() {
System.out.println("这个类是" + this.getClass());
}}
Ⅷ java 实现接口和继承有什么区别
首先的话,在 Java 中应该说“扩展”(extend)而不是“继承”(inherit),尽管知道它实现上就是C++那种继承,但逻辑上是不完全相同的。
再考虑到接口即协议,对接口的扩展,或是说对协议的扩展,实际上就包括了对其公用方法的扩展以及对其定义的扩展两个方面,其中扩展接口定义实际上即为对协议添加更多的约束,在减少了其可能包含的类的种类的同时也给了这些类更清晰的定义,也就允许用户基于这更清晰的定义做出更多的操作了。
所以呢,实际类的扩展实际上和继承是相同的,子类确实继承了父类的实现,但接口的扩展则只会获取到父接口的方法声明,继承的意味并不明显,更多的实际上在于对其原协议的扩展,因此应将子接口和父接口间的关系视为扩展而不单单是继承
其实就是多去思考为什么在Java这叫扩展不叫继承,很多问题就迎刃而解了
Ⅸ java 什么是接口,如何实现接口
JAVA中被interface修饰的为接口
如public interface onClickListener{
void onClick(int KeyCode);
}
实现接口需要用implements关键字来实现,同时需要复写接口中实现的方法就行
public class Key implements onClickListener{
public void onClick(int KeyCode){
// TODO 这里是实现的代码
}
}
Ⅹ java里实现一个接口的类必须要实现接口里的所有方法吗
一、实现接口或继承抽象类的非抽象子类必须实现接口的所有方法或抽象类的所有抽象方法。
接口中的所有方法均为抽象方法,抽象类中包含非抽象方法和抽象方法。如果一个非抽象子类实现了接口,那么该子类必须实现父接口的所有方法。如果一个非抽象子类继承了抽象类,那么该子类必须实现抽象类的所有抽象方法。
二、实现方案
(一)实现接口
1. 定义接口
/**
*接口:表示人类行为
*/
interfaceBehavor{
/**
*抽象方法:“吃饭”方法
*/
voideat();
/**
*抽象方法:“睡觉”方法
*/
voidsleep();
}
2. 定义子类,实现接口
/**
*子类:表示人类,实现“行为”接口
*/
classPersonimplementsBehavor{
/**
*姓名
*/
protectedStringname=null;
publicPerson(Stringname){
this.name=name;
}
//实现接口的抽象方法
@Override
publicvoideat(){
System.out.println(name+"正在吃饭......");
}
//实现接口的抽象方法
@Override
publicvoidsleep(){
System.out.println(name+"正在睡觉......");
}
}
3. 定义调用类,调用方法
publicclassMain{
publicstaticvoidmain(String[]args){
Personp=newPerson("张三其");
p.eat();
p.sleep();
}
}
(二)继承抽象类
1. 定义抽象类
/**
*抽象类:表示人类
*/
abstractclassPerson{
/**
*姓名
*/
protectedStringname=null;
publicPerson(Stringname){
this.name=name;
}
/**
*抽象方法:吃饭
*/
publicabstractvoideat();
/**
*抽象方法:睡觉
*/
publicabstractvoidsleep();
}
2. 定义子类,继承抽象类
/**
*子类:学生类
*/
classStudentextendsPerson{
publicStudent(Stringname){
super(name);
}
//实现抽象类的抽象方法
@Override
publicvoideat(){
System.out.println("学生"+name+"正在吃饭......");
}
//实现抽象类的抽象方法
@Override
publicvoidsleep(){
System.out.println("学生"+name+"正在吃饭......");
}
}
3. 定义调用类,调用方法
publicclassMain{
publicstaticvoidmain(String[]args){
Personp=newStudent("张三其");
p.eat();
p.sleep();
}
}