如何在Java类中定义接口属性并如何使用接口的方法

作者&投稿:汝清 (若有异议请与网页底部的电邮联系)
在Java接口的实现类中如何调用这个接口中定义的变量?~

class A{int num=10;
public int getNum() {
return num;
}
} //定义父类

interface B {int num=1;} //定义接口

public class C extends A implements B{
public static void main(String[] args){
C c=new C();
System.out.println(c.getNum());
System.out.println(B.num);
}
}

因为接口里面的i是常量,就如楼上的所说,
你要访问,因为随便哪个在接口里的常量
都是静态的,可以通过类名即B.num调用,而
在类里面定义的就不同,你可以专门写一个方法
来取值!你想直接调用接口和类中的同名num是
做不到的!

用implement关键字,例如:
interface A{ void aMethod();}class B implement A{ void aMethod(){ //方法具体实现 }}

摘要
一, 接口基础知识

1, java语言不支持一个类有多个直接的父类(多继承),但可以实现(implements)多个接口,间接的实现了多继承.
2, 与接口相关的设计模式:
1, 定制服务模式
设计精粒度的接口,每个接口代表相关的一组服务,通过继承来创建复合接口
2, 适配器模式
当每个系统之间接口不匹配时,用适配器来转换接口
3, 默认适配器模式
为接口提供简单的默认实现
4, 代理模式
为接口的实现类创建代理类,使用者通过代理来获得实现类的服务
5, 标识类型模式
用接口来标识一种没有任何行为的抽象类型
6, 常量接口模式
在接口中定义静态常量,在其它类中通过import static语句引入这些常量
3, 接口的特征归纳:
1, 接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用"_"分隔)
2, 接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化
public interface A
{
int CONST = 1; //合法,CONST默认为public,static,final类型
void method(); //合法,method()默认为public,abstract类型
public abstract void method2(); //method2()显示声明为public,abstract类型
}
3, 接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法
public interface A
{
int var; //错,var是常量,必须显示初始化
void method(){...}; //错,接口中只能包含抽象方法
protected void method2(); //错,接口中的方法必须是public类型
static void method3(){...}; //错,接口中不能包含静态方法
}
4, 接口中没有构造方法,不能被实例化
public interface A
{
public A(){...}; //错,接口中不能包含构造方法
void method();
}
5, 一个接口不能实现(implements)另一个接口,但它可以继承多个其它的接口
public interface A
{
void methodA();
}
public interface B
{
void methodB();
}
public interface C extends A, B //C称为复合接口
{
void methodC();
}
public interface C implements A{...} //错
6, 接口必须通过类来实现它的抽象方法
public class A implements B{...}
7, 当类实现了某个接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象的
8, 不允许创建接口的实例(实例化),但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例
public class B implements A{}
A a = new B(); //引用变量a被定义为A接口类型,引用了B实例
A a = new A(); //错误,接口不允许实例化
9, 一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承.
public class A extends B implements C, D{...} //B为class,C,D为interface
4, 通过接口,可以方便地对已经存在的系统进行自下而上的抽象,对于任意两个类,不管它们是否属于同一个父类,只有它
们存在相同的功能,就能从中抽象出一个接口类型.对于已经存在的继承树,可以方便的从类中抽象出新的接口,但从类
中抽象出新的抽象类却不那么容易,因此接口更有利于软件系统的维护与重构.对于两个系统,通过接口交互比通过抽象
类交互能获得更好的松耦合.
5, 接口是构建松耦合软件系统的重要法宝,由于接口用于描述系统对外提供的所有服务,因此接口中的成员变量和方法都
必须是public类型的,确保外部使用者能访问它们,接口仅仅描述系统能做什么,但不指明如何去做,所有接口中的方法
都是抽象方法,接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量.二, 比较抽象类与接口
1, 抽象类与接口都位于继承树的上层
相同点
1, 代表系统的抽象层,当一个系统使用一颗继承树上的类时,应该尽量把引用变量声明为继承树的上层抽象类型,
这样可以提高两个系统之间的送耦合
2, 都不能被实例化
3, 都包含抽象方法,这些抽象方法用于描述系统能提供哪些服务,但不提供具体的实现
不同点:
1, 在抽象类中可以为部分方法提供默认的实现,从而避免在子类中重复实现它们,这是抽象类的优势,但这一优势
限制了多继承,而接口中只能包含抽象方法.
由于在抽象类中允许加入具体方法,因此扩展抽象类的功能,即向抽象类中添加具体方法,不会对它的子类造
成影响,而对于接口,一旦接口被公布,就必须非常稳定,因为随意在接口中添加抽象方法,会影响到所有的实
现类,这些实现类要么实现新增的抽象方法,要么声明为抽象类
2, 一个类只能继承一个直接的父类,这个父类可能是抽象类,但一个类可以实现多个接口,这是接口的优势,但这
一优势是以不允许为任何方法提供实现作为代价的三, 为什么Java语言不允许多重继承呢?
当子类覆盖父类的实例方法或隐藏父类的成员变量及静态方法时,Java虚拟机采用不同的绑定规则,假如还允许
一个类有多个直接的父类,那么会使绑定规则更加复杂,因此,为了简化系统结构设计和动态绑定机制,Java语言
禁止多重继承.
而接口中只有抽象方法,没有实例变量和静态方法,只有接口的实现类才会实现接口的抽象方法(接口中的抽象方
法是通过类来实现的),因此,一个类即使有多个接口,也不会增加Java虚拟机进行动态绑定的复杂度.因为Java虚
拟机永远不会把方法与接口绑定,而只会把方法与它的实现类绑定.四, 使用接口和抽象类的总体原则:
1, 用接口作为系统与外界交互的窗口
站在外界使用者(另一个系统)的角度,接口向使用者承诺系统能提供哪些服务,站在系统本身的角度,接口制定
系统必须实现哪些服务,接口是系统中最高层次的抽象类型.通过接口交互可以提高两个系统之间的送耦合
系统A通过系统B进行交互,是指系统A访问系统B时,
把引用变量声明为系统B中的接口类型,该引用变量引用系统B中接口的实现类的实例.
public interface B
{
}
public class C implements B
{
}
public class A
{
}
B a = new C();
2, 接口本身必须非常稳定,接口一旦制定,就不允许随遇更加,否则对外面使用者及系统本身造成影响
3, 用抽象类来定制系统中的扩展点
抽象类来完成部分实现,还要一些功能通过它的子类来实现 2008/1/9
一, Java多态机制中的绑定规则深入剖析
class Base
{
String var = "BaseVar"; //实例变量
static String staticVar = "StaticBaseVar"; //静态变量 void method() //实例方法
{
System.out.println("Base method");
} static void staticMethod() //静态方法
{
System.out.println("Static Base method");
}
}public class Sub extends Base
{
String var = "SubVar"; //实例变量
static String staticVar = "StaticSubVar"; //静态变量

void method() //隐藏父类的method()方法
{
System.out.println("Sub method");
} static void staticMethod() //隐藏父类的staticMethod()方法
{
System.out.println("Static Sub method");
} String subVar = "Var only belonging to Sub"; void subMethod()
{
System.out.println("method only belonging to Sub");
} public static void main(String args[])
{
//引用变量who被声明为Base类型,引用Sub类的实例
Base who = new Sub();

//成员变量(静态变量,实例变量)与引用变量所声明的类型(Base类型)的成员变量绑定
System.out.println("who.var = "+who.var); //所以,打印Base类的var变量
System.out.println("who.staticVar = "+who.staticVar); //所以,打印Base类的staticVar变量 //实例方法与引用变量实际引用的对象(Sub对象)的方法绑定
who.method(); //所以,打印Sub实例的method()方法 //静态方法与引用变量所声明的类型(Base类型)的方法绑定
who.staticMethod(); //所以,打印Base类的staticMethod()方法
}
}

【分析过程】
1, 对于一个引用类型的变量,Java编译器按照它声明的类型来处理.
例如在以下代码中,编译器认为who是Base类型的引用变量,不存在subVar成员变量喝subMethod()方法,编译报错
Base who = new Sub(); //引用变量who被声明为Base类型,引用Sub类的实例
who.subVar = "123"; //编译错,在Base类中没有subVar属性
who.subMethod(); //编译错,在Base类中没有submethod()方法
如果要访问Sub类的成员,必须通过强制类型转换:
Base who = new Sub();
//把Base引用类型的who成员变量强制转换为Sub引用类型
//把引用变量转换为子类的类型称为向下转型,把引用变量转换为父类的类型称为向上转型
((Sub)who).subVar = "123";
((Sub)who).subMethod();
Java编译器允许在具有直接或间接继承关系的类之间进行类型转换,对于向上转型,Java编译器会自动进行,对于
向下转型,需要进行强制类型转换
如果两种类型之间没有继续关系,即不在继承树的同一个继承分支上,那么Java编译器不允许进行类型转换
2, 对于一个引用类型的变量,运行时Java虚拟机按照它实际引用的对象来处理
例如以下代码虽编译可通过,但运行时会抛出ClassCastException运行时异常
Base who = new Base(); //who引用Base类的实例
Sub s = (Sub)who; //运行时会抛出ClassCastException
在运行时,子类的对象可以转换为父类类型,而父类的对象实际上无法转换为子类类型
3, 在运行时环境中,通过引用类型变量来访问所引用对象的方法和属性时,Java虚拟机采用以下绑定规则:
1, 实例方法与引用变量实际引用的对象的方法绑定,这种绑定属于动态绑定,因为是在运行时由Java虚拟机
动态决定的
2, 静态方法与引用变量所声明的类型的方法绑定,这种绑定属于静态绑定,因为实际上是在编译阶段就已经
绑定
3, 成员变量(静态变量,实例变量)与引用变量所声明的类型的成员变量绑定,这种绑定属于静态绑定,因为
实际上是在编译阶段就已经绑定

写一个接口,并写一个类,用类去继承那个接口就可以调用了!

接口和类是并列的概念,在java类里面定义接口不会。
这是定义接口和方法:
public interface test(){
public void fa();
}
在接口中的方法默认为抽象方法,所以必须实现,写一个实现类,

实现之后,就可以创建实现类,然后通过这个类的对象调用方法。


有关在JAVA类中定义基本变量的疑惑?
把 i = 20 写进 {} ,就变成语句块,这是可以。语句一般分为static和non-static 举个例子:public class Test { \/\/ 把 i 变成 static static int i = 10; \/\/ static 语句块 在类加载的时候就会执行。 static { i = 20; System.out.println("static block"); }...

java定时任务需要一直启动服务器吗?
Java定时任务一般是通过定时器或者定时调度框架来实现的。对于定时任务的执行,通常需要在服务器上运行一个定时任务程序。因此,Java定时任务需要服务器一直运行,才能保证定时任务的正常执行。具体来说,如果服务器因为某些原因停机或者重启,那么定时任务也会因为此而中断。如果需要保证定时任务的连续执行,就需...

JAVA有哪些基本数据类型啊
回答:数据类型 数据类型就是对内存位置的抽象表达。程序员可以利用多种数据类型:某些由编程语言定义,某些由外部库定义,还有 些则由程序员来定义。很多编程语言都依赖于特定的计算机类型和对数据类型属性的具体编译实现,比如word和integer数据类型的大小等。另一方面, Java的虚拟机负责定义其内置数据类型的各方...

在Java中的类是通过什么形式进行组织和管理的?
(5) 在Java中,类定义采取几乎和C++一样的形式。但没有标志结束的分号。没有class foo这种形式的类声明,只有类定义。 class aType() void aMethod() } (6) Java中没有作用域范围运算符“::”。Java利用点号做所有的事情,但可以不用考虑它,因为只能在一个类里定义元素。即使那些方法定义,也必须在一个类的...

java里,接口中可以定义哪四种成员,各有何意义?
公有、静态、常量(JDK8以前):可以被子类继承;公有、抽象方法(JDK8以前):强制子类必须重写;公有、默认方法:(JDK8开始)必须用public,default修饰,必须有方法体:被子类继承,子类可以重写,也可以不重写;.公有、静态方法(JDK8开始):不能被子类继承,就属于本接口,通过"接口名.静态方法名"访问,...

Java中,在定义一个类的时候,定义一个空的构造方法和不定义构造方法有何...
定义了比较好...有时不定义会出错了

java 不管类中是否定义了何种构造函数,创建对象时都可以使用默认的构造...
class Java{ public Java(int a){ } } 当你要创建对象的时候,使用如下方法,JAVA就会报错 Java j=new Java();因为你自己定义了构造函数,JAVA就不再提供默认构造函数了 上面那个类的解决办法有两个 --- Java j=new Java(123);--- class Java{ public Java(){ } public Java(int a){ }...

在java中,什么是抽象类和抽象方法,创建有何作用
对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract。 在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方...

JAVA中类中的方法存储在什么地方?
类加载时 方法信息保存在一块称为方法区的内存中, 并不随你创建对象而随对象保存于堆中。可参考《深入java虚拟机》前几章。另参考(他人文章):如果instance method也随着instance增加而增加的话,那内存消耗也太大了,为了做到共用一小段内存,Java 是根据this关键字做到的,比如:instance1.instance...

在java中系统定义的异常与用户自定义的异常有何不同,如何使用这两类异常...
系统的异常是经常出现的异常进行分类,以便于迅速找到异常原因,例如数组越界,空指针,而用户定义的异常比如账号密码错误跑出xxxx异常让开发人员能知道是有什么原因引起的,总之都是方便判断!

甘德县18527785086: 如何在Java类中定义接口属性并如何使用 -
茹良阿奇: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16interfaceIFoo{finalintfvar=123;staticintsvar=456; }classTest implementsIFoo{publicvoidmethod() {PrintWriter pw=newPrintWriter(System.out,true);pw.println("IFoo.fvar="+fvar); // 使用接口的fvar变量...

甘德县18527785086: 如何在Java类中定义接口属性并如何使用接口的方法 -
茹良阿奇: 摘要 一, 接口基础知识 1, java语言不支持一个类有多个直接的父类(多继承),但可以实现(implements)多个接口,间接的实现了多继承. 2, 与接口相关的设计模式: 1, 定制服务模式 设计精粒度的接口,每个接口代表相关的一组服务,...

甘德县18527785086: java中如何定义和使用接口?
茹良阿奇: 接口只是定义一些方法和属性,来规范类的行为. 接口举例: public interface ITest 【extends 父接口.....】//[]可选 { [ public] void [返回类型] test();//前面的修饰符为可选 不过建议加上 不加的话编译器编译时默认编译为public 接口修饰也是一样 } 使用接口的,类使用implements 实现ITest 接口.然后添加接口中定义的方法到类中,并实现他们.即可/

甘德县18527785086: java 类中定义接口怎么实现 -
茹良阿奇:用implement关键字,例如: interface A{void aMethod(); } class B implement A{void aMethod(){//方法具体实现} }

甘德县18527785086: java怎样定义接口 -
茹良阿奇: 例如,定义一个用于计算的接口,在该接口中定义了一个常量PI和两个方法,具体代码如下:[java] view plaincopy public interface CalInterface {final float PI=3.14159f;//定义用于表示圆周率的常量PIfloat getArea(float r);//定义一个用于计算面...

甘德县18527785086: java中如何实现接口以及接口中需要注意的 -
茹良阿奇: 首先用interface声明一个接口,注意接口不是类,我们习惯上可以认为他是一个抽象的类,因为它不能实现方法体,只有方法的定义.然后我们可以写一个类去实现这个接口例如:public class Text implements IUSBable 这样就说明你的这个类中还实现你接口中说定义的方法,不然会报错的! 我的概念就是接口类似于生活中的水龙头,只要你这个人有实现这个接口(水龙头)的方法,那么你就可以用这个水龙头,这个比喻虽然不是那么这样从另一方面说明了接口拥有的可扩展性,假如以后程序升级我只要将接口中的方法增加或修改一下! 这种概念性的东西是要自己多体会的,最好联系生活中的实例来理解,这样会事半工倍!

甘德县18527785086: java怎么使用接口 java如何实现接口操作 -
茹良阿奇: 接口是Java 实现多继承的一种机制,一个类可以实现一个或多个接口.接口是一系列 方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些 方法可以在不同的地方被不同的类实现,而这些实现可以具有不同...

甘德县18527785086: java中接口的功能及其定义格式 -
茹良阿奇: 接口定义为 public interface 接口名称{}接口的作用是基于面向对象思想的,给你举个例子: 例如,我们有一个男人实现了“人”接口,“人”接口中有走路的方法,现在男人实现了“走路”方法,这时候,如果有个需求,要把男人换为女人,这时候只要换做女人类,并且女人类实现了“走路”方法,用女人类替换掉男人类即可. 这样的好处就是,接口没有变,也就是设计中的接口没有变,只是实现类的变化,最大程度的减少了需求变化对代码的影响. 希望对楼主有帮助,如果还有不明白的地方,请留言.

甘德县18527785086: java怎样创建接口,应用接口 -
茹良阿奇: 创建接口:public interface myFirstInterface(){ int ID=1; void run(); void smile(); } 在本次创建的接口中,定义了一个int的ID 和一个方法run,在接口中,虽然没有显示的写出public 关键字,但是所有的成员都是public反问的,接口里面的变量都...

甘德县18527785086: 在JAVA 中接口的定义,使用接口的有点是什么? -
茹良阿奇: java其实是单继承,但现实情况之中存在着多继承这种现象(举个例子吧 大熊猫是一只动物 从动物继承 同时它也是一只值钱的东西,假如你有另外一个类叫值钱的东西,那么大熊猫也应该从它继承,可是你不能这么写呀 你说class DaXiongMao...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网