问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-24 08:20

我来回答

3个回答

热心网友 时间:2022-05-03 02:11

摘要
一, 接口基础知识

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, 成员变量(静态变量,实例变量)与引用变量所声明的类型的成员变量绑定,这种绑定属于静态绑定,因为
实际上是在编译阶段就已经绑定

参考资料:http://ke.soso.com/v605129.htm?pid=ke.box

热心网友 时间:2022-05-03 03:29

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

热心网友 时间:2022-05-03 05:04

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

实现之后,就可以创建实现类,然后通过这个类的对象调用方法。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
私立学校退休有退休金吗 锤子便签排版怎么修改?锤子便签排版的修改方法 锤子便签怎么调整字体 锤子便签APP字体调整方法 锤子便签怎么让字体变大 锤子便签让字体变大方法 苏州新浒花园附近的敬恩实验小学的入学条件,外地农村户口没在苏州买房子... 96年前出生的怎样补办出生证,区计生办说不能补办, 96年以前的出生证叫什么 我的女儿是1995年出身的,请问要补办出身证明该怎么办? 出生证明补办地点在哪办理? 求大师赐教,求高人指点(给我女儿起名) 为什么接口没有构造函数 word文档如何重新排列页码? java接口编译器会产生构造方法吗 在java中,什么是接口,接口的特点是什么 为什么抽象类有构造方法,接口却没有构造方法 接口中有构造方法吗 、接口与类的区别; java既然接口没有构造方法,为什么声明一个实现于接口的匿名内部类又用到了类似构造方法的东西? Java的接口和C++的虚类的相同和不同处? 关于接口和抽象类,下列说法正确的是: A. 抽象类可以有构造方法,接口没有构造方法 接口为什么不能有构造函数 Java中抽象类和接口中有构造方法吗 接口为什么没有构造方法 什么是权重股?2016年权重股有哪些 权重股是什么意思 权重股有哪些 新股民问一下,大盘二八分化是什么意思? 权重股搭台,成长股唱戏是什么意思 权重股搭台,小盘股唱戏 京东白条还款为什么不能用绑定的信用卡 京东金融,借钱,绑定的那个银行卡不用了,我还款想用另一张银行卡还款该怎么做 Java接口中需不需要构造函数? 接口的定义和作用是什么? 什么叫匿名l类?作用 求解释··· java抽象类和接口有构造器吗? java中,接口有缺省的构造方法,可以被实例化吗?为什么? jave中,接口可以声明构造方法吗? 怎么给自己喜欢的电影配音。 求解怎么给电影片段配音,英语老师布置的作业,,急急急!! 影视后期一般配音该怎么配? 怎么给电影配音 如何进行电影配音 怎么用会声会影x5做电影配音? 电影的配音是怎么配的,是他们说出来的声音就可以了,还是后期再通过电脑加工的 电影是怎么配音的 怎么为电影配音 一部电影的配音是怎么收费的? 电影是如何配音的(拟音) 闰月的人怎么过生日呀? 阴历四月过生日赶上金年闰四月生日是过前一个还是后一个? 中国的生日是按农历还是阳历过的?如果是农历,那出现闰月怎么办? 阴历中的“闰月”是怎么回事啊?