-
2020-08-12 23:32:40
在Java 9+版本中,接口的内容可以有:
1. 成员变量其实是常量,格式:
[public] [static] [final] 数据类型常量名称=数据值;
注意:常量必须进行赋值,而且一旦赋值不能改变。常量名称完全大写,用下划线进行分隔。
2.接口中最重要的就是抽象方法,格式:
[public] [abstract] 返回值类型方法名称(参数列表); .
注意:实现类必须覆盖重写接口所有的抽象方法,除非实现类是抽象类。
3.从Java 8开始,接口里允许定义默认方法,格式:
[public] default返回值类型方法名称(参数列表) {方法体}
注意:默认方法也可以被覆盖重写
4. 从Java 8开始,接口里允许定义静态方法,格式:
[public] static 返回值类型方法名称(参数列表) {方法体}
注意:应该通过接口名称进行调用,不能通过实现类对象调用接口静态方法
5.从Java 9开始,接口里允许定义私有方法,格式:
普通私有方法: private 返回值类型方法名称(参数列表) {方法体}
静态私有方法: private static 返回值类型方法名称(参数列表) {方法体}
注意: private的方法只有接口自己才能调用,不能被实现类或别人使用。使用接口的时候,需要的注意事项:
1.接口是没有静态代码块或者构造方法的。
2.一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。
格式:public cLass MyInterfaceImpl implements MyInterfaceA, MyInterfaceB { // 覆盖重写所有抽象方法 }
3.如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。
4.如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。
5.如果实现类锁实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。
6.一个类如果直接父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类当中的方法。更多相关内容 -
我们可以在java8中将接口成员声明为私有成员还是受保护的成员?
2021-03-17 19:34:21接口的私有成员如果接口的成员是私有的,则不能提供方法的实现,或者不能在实现类中访问它的字段。因此,接口的成员不能是私有的。如果尝试将接口的成员声明为私有,则会生成一个编译时错误,提示“此处不允许使用...Java中的接口类似于类,但是它仅包含final和static的抽象方法和字段。
由于所有方法都是抽象的,因此无法实例化。要使用它,您需要使用一个类来实现此接口,并为其提供所有抽象方法的主体。
接口的私有成员
如果接口的成员是私有的,则不能提供方法的实现,或者不能在实现类中访问它的字段。
因此,接口的成员不能是私有的。如果尝试将接口的成员声明为私有,则会生成一个编译时错误,提示“此处不允许使用修饰符私有”。
示例
在下面的Java示例中,我们试图将接口的字段和方法声明为私有。public interface MyInterface {
private static final int num = 10;
private abstract void demo();
}
编译时错误
编译时,上面的程序生成以下错误。
输出结果MyInterface.java:2: error: modifier private not allowed here
private static final int num = 10;
^
MyInterface.java:3: error: modifier private not allowed here
private abstract void demo();
^
2 errors
接口的受保护成员
通常,可以在相同的类中或在继承该类的类中访问受保护的成员。但是,我们不继承将要实现的接口。
因此,不能保护接口的成员。如果尝试声明接口的成员受保护,则会生成一个编译时错误,提示“此处不允许使用修饰符保护”。
示例
在下面的Java示例中,我们尝试声明受保护接口的字段和方法。public interface MyInterface{
private static final int num = 10;
private abstract void demo();
}
编译时错误
编译时,上面的程序生成以下错误。
输出结果MyInterface.java:2: error: modifier private not allowed here
private static final int num = 10;
^
MyInterface.java:3: error: modifier private not allowed here
private abstract void demo();
^
2 errors
-
c#中抽象类和接口的详细介绍
2021-01-20 07:05:203、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员); 另外,接口有如下特性:接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些 -
C#类和接口
2021-02-06 14:43:481.类的定义C#使用类关键字class定义类,如:public class MyClass{}2.类的继承类继承使用:public...子类的可访问不能大于父类的可访问性,如下是错误的internal class BaseClass{}public class MyClass:BaseClass{}...1.类的定义
C#使用类关键字class定义类,如:
public class MyClass
{
}
2.类的继承
类继承使用:
public class BaseClass
{
}
public class MyClass:BaseClass
{
}
3.子类的可访问不能大于父类的可访问性,如下是错误的
internal class BaseClass
{
}
public class MyClass:BaseClass
{
}
4.接口的定义使用 interface 关键字,一般以I开头
interface IMyInterface
{
void xyz();
}
5.抽象类,抽象类以abstract关键字定义
abstract class MyClass
{
int age=0;
abstractvoid xyz();
}
6.抽象类和接口的相似处和区别
相似处:接口和类都包含子类可以继承的成员,都不能实例化对象,单都可以声明对象
区别:(1)抽象类可以包含抽象成员和非抽象成员(即有方法体的成员),接口只能包含抽象成员,接口成员默认是抽象的,但不使用abstract修饰
(2)抽象类可以包含公共的,受保护的,受保护的内部成员,而接口成员一是公共的,但是不使用访问控制修饰符
(3)接口不能包含字段(可以包含属性),构造函数,析构函数,静态成员和常量。
7.接口的实现
接口可以包含属性和方法,当实现一个接口时必须实现相应的方法,且书写属性的get和set块,实现的方法和属性必须是公共的;
可以使用abstract或virtual实现接口成员,但不能用static或const。
interface Iterface1
{
void Dosomething();
}
interface Iterface2 : Iterface1
{
new void Dosomething();
string Name { get; set; }
}
class TestInterface:Iterface2
{
public void Dosomething()
{
}
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
}
7.参考资料
http://blog.sina.com.cn/s/blog_574c993d0100d59n.html
-
为什么接口中的成员变量非得是public static final?
2017-06-25 11:03:20为什么接口中的成员变量非得是public static final的呢? 首先明白一个原理,就是接口的存在意义。接口就是为了实现多继承的抽象类,是一种高度抽象的模板、标准或者说协议。规定了什么东西该是这样,如果...为什么接口中的成员变量非得是public static final的呢?
首先明白一个原理,就是接口的存在意义。接口就是为了实现多继承的抽象类,是一种高度抽象的模板、标准或者说协议。规定了什么东西该是这样,如果你继承了我这接口,就必须这样。比如USB接口,就是小方口,两根电源线和两根数据线,不能多不能少。
(1)public
既然是公共的模板或者协议,那么如果定义成private就没有意义了,因为所有继承了你这接口的类都不能用,并且接口中的方法是不能够被具体实现的,因此,接口内部中也没有任何方法可使用。因此,为了让所有实现了该接口的类能够使用,就必须是public的。接口中定义的所有东西就应该是对所有用户开放的东西。 (2)static
所谓static,顾名思义,它代表着静态,静止不动的,都知道JVM内存中除了程序计数器,堆内存,栈内存,还有一块不大的内存区,叫做静态存储区。这块区域就是用来存储所有静态的方法和变量的。我想,java一开始设计static的原因也许是不想和实例捆绑在一起。你想想,java的主类中一定会有个public static main()方法,那是程序的执行入口。当初我在想,为什么一定要有个static呢?如果没有static,那么就必须先实例化main方法所在类对象,可是在哪实例化呢?JVM这样就找不到入口,因为没有static就必须先实例化分配内存后,才有main方法。如此死循环。
有了static就不一样了,JVM加载类的时候,首先开始加载的就是静态的成员变量和方法。而main()方法就在里面,JVM不需要加载任何实例对象,就能开始执行了,因此main方法是必须static的。
好,罗嗦了。回到题目,如果接口中的成员变量是非静态的,那么每一个实现了该接口的类都会有这么一个变量。那么,因为接口是多继承的,那么如果另一个接口也是有同样这样一个变量呢,那你用哪一个?所以,因为是标准,所以我规定从一开始,这个东西只能有一份,只能放在静态存储区,如果第二个接口也想同命名这么一个变量,那么存储时候就会报错,因为我静态存储区已经有一份了。你改名吧。
(3)final
想想,如果不是final的,那么意味着每一个实现了该接口的子类都可以去修改这个变量。我们开头说了,接口就是标准规范,也改也只能是制定该接口的架构师来改,如果某类随便改的话,那么其他也继承了该接口的类就会受到影响。牵一发而动全身!!因此,既然是标准,那么就不能改,方便管理。 最后归纳:
- public是因为接口是标准,必须对外完全开放,自己藏着掖着没意义;
- static是因为要确保该变量只有一份,避免重名;
- final是因为接口的东西是大家共用的,不能随便修改,因此干脆不然你有修改的权限!
至此,解释完毕。这次分析后,对接口的存在意义更深刻了。
接口与类的区别:
- 接口不能用于实例化对象。
- 接口没有构造方法。
- 接口中所有的方法必须是抽象方法。
- 接口不能包含成员变量,除了 static 和 final 变量。
- 接口不是被类继承了,而是要被类实现。
- 接口支持多重继承。
接口特性
- 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
- 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误。
- 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
抽象类和接口的区别
- 1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
- 2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
- 3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
- 4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
-
接口中的方法和成员变量
2017-12-27 10:55:34接口Interface 1. 接口中的成员变量默认都是public、static、final类型的,必须被显式初始化 2. 接口中的方法默认都是public、...4. 接口没有构造方法,不能被实例化,在接口中定义构造方法是非法的。 5. 一个接口 -
接口为什么不能有构造函数
2020-05-06 15:18:053.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然 eclipse下不报错,但应该也不行),但... -
Java中抽象类和接口中均不能定义静态的抽象方法
2018-06-21 11:53:19而static修饰的方法在类实例化之前就已经别分配了内存,这样一来矛盾就出现了:抽象类不能被分配内存,而static方法必须被分配内存。所以抽象类中不能有静态的抽象方法。 定义抽象方法的目的是重写此方法,但如果定... -
C#中接口(Interface)的深入详解
2020-12-16 17:49:40定义 在 C# 语言中,类之间的继承关系仅支持单重继承,而接口是为了实现多重继承关系设计的。一个类能同时实现多个接口,还能在实现接口的同时再继承... 接口成员; } 接口命名通常以 I 字母开头,例如Itest。 接口成 -
C#接口 不包含成员的实现 那接口还有什么意义呢
2017-04-03 01:43:08C#接口 不包含成员的实现 那接口还有什么意义呢 ? -
详解C#接口以及实现/C# 接口中不能定义字段
2015-03-09 09:59:57C#接口是什么呢?C#接口(interface)用来定义一种程序的协定。...接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。 C#接口好比一种模版,这种模版定义了对 -
接口中的变量为什么不能是普通变量,只能是static final
2020-08-10 15:31:12接口中的变量为什么不能是普通变量,只能是public static final 我个人觉得编程是一种非常需要逻辑性的工作,当然有些东西能够靠死记硬背,但是只能是止于表象,理解其内部的逻辑和思想才是关键,所以我想用逻辑思维的... -
Java中接口里定义的成员变量
2018-05-04 11:54:03在interface里面的变量都是public static final 的。...接口就是提供一种统一的’协议’,而接口中的属性也属于’协议’中的成员.它们是公共的,静态的,最终的常量.相当于全局常量.抽象类是不’完全’的类... -
C#中接口(interface)的理解
2020-12-31 05:27:32都是“虚的”不能被实例化,这也是接口中为什么不能包含字段--成员变量的原因。 2.正因为接口是虚的,所以接口内的索引,属性,时间等只能有声明,而不能在接口内实现,具体如何实现是派生接口或者派生类的事。 3.都具有... -
概述C#定义接口成员
2015-04-10 13:55:47接口可以包含一个和多个成员,这些成员可以是方法、属性、索引指示器和事件,但不能是常量、域、操作符、构造函数或析构函数,而且不能包含任何静态成员。接口定义创建新的定义空间,并且接口定义直接包含的C#定义... -
接口和抽象类中的成员
2019-03-07 14:30:403、构造方法:接口中不能有构造方法 二、抽象类中 1. 不能创建抽象类的实例,但有构造方法,用于子类访问父类数据的初始化。 2. 抽象类主要是用来作为基类,但是抽象类也可以继承其它普通类或抽象类。 3. 抽象... -
接口中成员变量和成员函数介绍
2013-03-30 10:44:54像类那样,编译好的接口被保存在class 文件中。 1.接口说明 interface 前的修饰符是可选的。当没有修饰符的时候,表示此接口的访问只限于同包的 类。如果使用修饰符,则只能用public 修饰符,表示此接口是公有... -
Java接口中的成员变量默认为(public、static、final)、方法为(public、abstract)
2021-04-24 02:07:10接口也可包含基本数据类型的数据成员,但它们都默认为public、static 和final。接口中定义的方法默认为public、abstract。为什么Java接口中的成员变量默认为(public、static、final)、成员方法为(public、abs... -
我们可以使用Java在接口中创建非静态变量吗?
2021-02-26 18:22:42接口中的非静态变量不,您不能在接口中包含非静态变量。默认,接口的所有成员(方法和字段)都是公共的接口中的所有方法都是公共的和抽象的(静态和默认方法除外)。默认情况下,接口的所有字段均为public,static... -
java基础19. 下列有关接口的叙述错误的是哪项?...接口中只能包含抽象方法和常量 B.一个类可以实现多个接口
2021-03-12 20:53:00A 接口中只能包含抽象方法和常量这个是正确的下面给你说一下抽象类和接口的区别:抽象类由abstract关键字来修饰,接口由interface关键字来修饰。抽象类中除了有抽象方法外,也可以有数据成员和非抽象方法;而接口中... -
Java抽象类和接口中可以有成员变量吗?
2019-11-21 09:03:43//接口中也可以定义成员变量(必须是public的),方法不能有方法体 public int b = 88; public int getB(); } //实现类 class CC extends AA implements BB { public int getB(){ return 0; } } Java8支持... -
接口不能被实例化的吗?接口引用是什么?
2021-07-29 16:01:00接口,在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念... -
Java接口成员变量和方法默认修饰符(缺省属性)
2020-11-28 18:46:46从默认修饰符 “public static final” 中可以看出,在接口内定义成员变量时,成员变量为最终静态变量,不能被实例化为对象【没有对象】,并且必须赋值,在外面访问该成员变量时无法修改该成员变量的值。 例如: 1. -
C#中的应用程序接口介绍及实现,密封类与密封方法
2020-12-31 15:01:37接口的成员可以是方法(不能有方法体),属性,事件和索引器,但不能包含常数,字段,运算符,实例构造函数析构函数或类,也不能包括任何种类的静态成员,接口中的成员不允许添加访问修饰符,(默认都是public) ... -
java:接口和抽象类练习
2020-12-21 07:57:16在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 抽象类除了不能实例化对象之外,... -
C#隐式实现接口成员与显示实现接口成员
2015-12-29 14:50:41对C#隐式实现接口成员与显示实现接口成员的简单说明 -
Java - 如果你的Serializable类包含一个不可序列化的成员,会发生什么?你是如何解决的?
2019-08-19 16:04:14任何序列化该类的尝试都会因NotSerializableException而失败,但这可以通过在Java中为其设置瞬态(trancient)变量来轻松解决。 Java序列化相关的常见问题 Java序列化是一个重要概念,但它很少用作持久性解决方案... -
接口中只能定义常量和抽象方法,对么
2021-03-10 04:19:13在Java语言中,接口是一个抽象类型,是抽象方法的集合,通常以关键字interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口中只能定义常量和抽象方法,对。相关介绍:接口接口(Interface),在...