`

有关abstract interface 和interface的问题??

    博客分类:
  • Java
阅读更多

摘自:SCJP Guide和sun doc

网址:http://www.witscale.com/ebook/Browsable/ebook078.htm

网址:http://java.sun.com/docs/books/jls/second_edition/html/interfaces.doc.html


To summarize the modifiers in relation with interfaces, note that

         Interface can be declared with either public or default access . It is implicitly abstract.

         Interface methods are by default public and abstract.

         Interface variables are by default public, static and final.

1.接口可以声明为public(公共)或默认的访问权限。接口隐含表明是抽象的(abstract)的。
2.接口的方法默认即为public(公共)且是abstract(抽象)的.
3.接口中的变量默认即为public(公共), static(静态) and final(最终的)。

Table 3.3 shows the various combinations for the interface methods and constant declarations and how the compiler sees them.


Table 3.3 Valid declarations of interface methods and constants


Interface declarations

How the compiler interprets them

public interface Searchable {}

public abstract interface Searchable {}

abstract interface Searchable {}

abstract interface Searchable {}

interface Searchable {}

abstract interface Searchable {}

void search(String searchString);

public abstract void search(String searchString);

abstract void search(String searchString);

public abstract void search(String searchString);

public void search(String searchString);

public abstract void search(String searchString);

char MATCH_ONLY_ONE = ‘?’;

public static final char MATCH_ONLY_ONE = ‘?’;

public char MATCH_ONLY_ONE = ‘?’;

public static final char MATCH_ONLY_ONE = ‘?’;

static  MATCH_ONLY_ONE = ‘?’;

public static final char MATCH_ONLY_ONE = ‘?’;

final char MATCH_ONLY_ONE = ‘?’;

public static final char MATCH_ONLY_ONE = ‘?’;

final public char MATCH_ONLY_ONE = ‘?’;

public static final char MATCH_ONLY_ONE = ‘?’;




The order of modifiers does not matter in any variable or method declaration. For instance, the declaration public abstract static method(); is same as the abstract public static method(); . It is also the same as abstract static public method(); . By convention, however, the access modifier (if any) is written before the other modifiers.


Interfaces specify the set of methods that have to be implemented ultimately by a concrete (non-abstract class).

Abstract will specify a method which is not implemented in an abstract base class, and that must be implemented in a concrete subclass.


A side note; Values defined in an interface are public static final my default so

int VALUE = 5;

is the same as

public static final int VALUE = 5;

in an interface.


abstract Interfaces

Every interface is implicitly abstract . This modifier is obsolete and should not be used in new programs.

分享到:
评论
5 楼 gch_h 2010-12-01  
ryxxlong 写道

Interface can be declared with either public or default access . It is implicitly  abstract.
Interface methods are by default public and abstract.
Interface variables are by default public, static and final.
1.接口可以被声明为public或者默认的包访问权限.只要是接口(interface),它就隐含表明这是抽象的(abstract)的.即你写成public interface A{}其实它就等于public abstract interface A{},因为interface隐含是abstract的,所以编译器在编译时会自动加上abstract,不信的话你可以把public interface A{}反编译过来,它就会成为public abstract interface A{}了.所以abstract interface 与interface是没有区别的.
2. 你可以在接口中将方法声明为public的,但即使你不这么做,它们也是public的.同时是abstract的.也就是说方法void B()其实就是等于public abstract B(),你也可以通过反编译看一下.因为,当要实现一个接口时,在接口中被定义的方法必须被定义为是public的,否则,它们只能得到默认的包访问权限,这样在方法的继承过程中,其访问权限就被降低了,也就是说另一个包中的一个类实现了它,但因为这个方法是包访问权限,所以你无法对它进行实现,因为它对你是不可见的,所以这是java编译器所不允许的,所以它就默认是public的了.
3. 接口中的域默认是static 且是final 的.如int VALUE = 5 == static final int VALUE = 5
crabboy 写道
有区别吧:
abstract interface 的类可以extends 其他类

这句话真没看明白是啥意思.如果的意思是以为abstract interface可以extends,而interface不可以extends的话,那你完全错了,你还以为abstract interface与interface有区别.请看下面的代码:
interface IA{}
interface IB{}
interface IC extends IA{}
public interface ID extends IA,IB{
}
这是完全可以编译通过的.interface完全可以extends,并且可以同时extends多个接口,只要用逗号将接口名一一分隔即可.希望对你有帮助,如有错误,欢迎指出,再一起讨论!


你的理解是错误的!“abstract interface 的类可以extends 其他类”是指如下情况
abstract interface IC extends java.lang.Object implement I1,I2{}
extends 其他类不是extends 其他接口
我以前看过这样的代码,当时没时间注意到底为什么要这样写,现在我也想了解一下。等高人回答。
4 楼 gch_h 2010-12-01  
ryxxlong 写道

Interface can be declared with either public or default access . It is implicitly  abstract.
Interface methods are by default public and abstract.
Interface variables are by default public, static and final.
1.接口可以被声明为public或者默认的包访问权限.只要是接口(interface),它就隐含表明这是抽象的(abstract)的.即你写成public interface A{}其实它就等于public abstract interface A{},因为interface隐含是abstract的,所以编译器在编译时会自动加上abstract,不信的话你可以把public interface A{}反编译过来,它就会成为public abstract interface A{}了.所以abstract interface 与interface是没有区别的.
2. 你可以在接口中将方法声明为public的,但即使你不这么做,它们也是public的.同时是abstract的.也就是说方法void B()其实就是等于public abstract B(),你也可以通过反编译看一下.因为,当要实现一个接口时,在接口中被定义的方法必须被定义为是public的,否则,它们只能得到默认的包访问权限,这样在方法的继承过程中,其访问权限就被降低了,也就是说另一个包中的一个类实现了它,但因为这个方法是包访问权限,所以你无法对它进行实现,因为它对你是不可见的,所以这是java编译器所不允许的,所以它就默认是public的了.
3. 接口中的域默认是static 且是final 的.如int VALUE = 5 == static final int VALUE = 5
crabboy 写道
有区别吧:
abstract interface 的类可以extends 其他类

这句话真没看明白是啥意思.如果的意思是以为abstract interface可以extends,而interface不可以extends的话,那你完全错了,你还以为abstract interface与interface有区别.请看下面的代码:
interface IA{}
interface IB{}
interface IC extends IA{}
public interface ID extends IA,IB{
}
这是完全可以编译通过的.interface完全可以extends,并且可以同时extends多个接口,只要用逗号将接口名一一分隔即可.希望对你有帮助,如有错误,欢迎指出,再一起讨论!


你的理解是错误的!“abstract interface 的类可以extends 其他类”是指如下情况
interface IC extends java.lang.Object implement I1,I2{}
extends 其他类不是extends 其他接口
我以前看过这样的代码,当时没时间注意到底为什么要这样写,现在我也想了解一下。等高人回答。
3 楼 ryxxlong 2010-05-20  

Interface can be declared with either public or default access . It is implicitly  abstract.
Interface methods are by default public and abstract.
Interface variables are by default public, static and final.
1.接口可以被声明为public或者默认的包访问权限.只要是接口(interface),它就隐含表明这是抽象的(abstract)的.即你写成public interface A{}其实它就等于public abstract interface A{},因为interface隐含是abstract的,所以编译器在编译时会自动加上abstract,不信的话你可以把public interface A{}反编译过来,它就会成为public abstract interface A{}了.所以abstract interface 与interface是没有区别的.
2. 你可以在接口中将方法声明为public的,但即使你不这么做,它们也是public的.同时是abstract的.也就是说方法void B()其实就是等于public abstract B(),你也可以通过反编译看一下.因为,当要实现一个接口时,在接口中被定义的方法必须被定义为是public的,否则,它们只能得到默认的包访问权限,这样在方法的继承过程中,其访问权限就被降低了,也就是说另一个包中的一个类实现了它,但因为这个方法是包访问权限,所以你无法对它进行实现,因为它对你是不可见的,所以这是java编译器所不允许的,所以它就默认是public的了.
3. 接口中的域默认是static 且是final 的.如int VALUE = 5 == static final int VALUE = 5
crabboy 写道
有区别吧:
abstract interface 的类可以extends 其他类

这句话真没看明白是啥意思.如果的意思是以为abstract interface可以extends,而interface不可以extends的话,那你完全错了,你还以为abstract interface与interface有区别.请看下面的代码:
interface IA{}
interface IB{}
interface IC extends IA{}
public interface ID extends IA,IB{
}
这是完全可以编译通过的.interface完全可以extends,并且可以同时extends多个接口,只要用逗号将接口名一一分隔即可.希望对你有帮助,如有错误,欢迎指出,再一起讨论!

2 楼 crabboy 2010-05-19  
有区别吧:
abstract interface 的类可以extends 其他类
1 楼 sbpya 2010-05-12  
我也觉得abstract interface与interface是没有区别,之所以,有些写成abstract interface在编译时没有报错,应该是JDK为了兼容之前的1.1或更早的版本时期的代码,才不会报错,后期我们在写interface时,完全没有必要加上abstract关键字,这也是不推荐的写法,纯属脱了裤子放屁。

相关推荐

    深入理解abstract class和interface

    abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性...

    abstract class和interface有什么区别?

    ### abstract class和interface有什么区别? 在面向对象编程中,`abstract class` 和 `interface` 都是用来实现抽象化的工具,但它们之间存在着重要的差异。理解这些差异有助于开发者更有效地设计和实现软件系统。 ...

    override abstract virtual interface比较

    Override 关键字用于重写父类中的虚拟方法,Abstract 关键字用于声明抽象类和抽象方法,Virtual 关键字用于声明虚拟方法,而 Interface 关键字用于声明接口。只有正确地使用这些关键字,才能编写出高质量的 C# 程序...

    java中abstractclass和Interface.doc

    - 结合`abstract class`和`interface`的优点,可以通过定义一个`interface`并在其下方定义一个实现该接口的`abstract class`来达到最佳效果。 - 这样既确保了接口的灵活性,又提供了抽象类的部分实现,方便后续的...

    java abstract class interface之间的区别介绍

    在Java编程语言中,抽象类(abstract class)和接口(interface)都是用于实现抽象化的重要工具,它们可以帮助程序员更好地组织代码,提高代码的可复用性和扩展性。尽管二者在功能上有一些相似之处,但在实际使用中...

    [转]深入理解abstract class和interface

    在编程领域,`abstract class`(抽象类)和`interface`是两种重要的设计模式,它们在构建可扩展和模块化的软件系统中起着至关重要的作用。这篇文章将深入探讨这两个概念,以及它们在实际开发中的应用。 首先,让...

    static、final、abstract和interface使用总结

    在Java编程语言中,`static`、`final`、`abstract`和`interface`是四个非常重要的关键字,它们分别代表不同的特性,用于定义类、变量和方法的行为。下面是对这些关键字的详细解释: 1. **static(静态)** - **...

    interface&abstract class

    在面向对象编程语言中,如Java,接口(Interface)和抽象类(Abstract Class)是两种非常重要的概念,它们都被用来实现代码的复用性和扩展性。但它们之间存在一些根本性的区别,这些差异对于正确地设计类结构至关...

    PHP abstract与interface之间的区别

    在PHP编程语言中,`abstract`关键字和`interface`接口都是用于实现多态性和代码规范化的工具,但它们之间存在着显著的区别。这篇文章将深入探讨这两种概念,并解释它们各自的作用。 首先,我们来看`interface`接口...

    Java abstract class 与 interface对比

    在Java编程语言中,`abstract class`(抽象类)和`interface`是两种重要的机制,它们用于实现多态性和抽象性。虽然它们都可以用来定义抽象方法,但它们之间存在显著的差异,这些差异影响了开发者在设计软件时的选择...

    Java程序开发中abstract 和 interface的区别详解

    在Java编程语言中,`abstract class`(抽象类)和`interface`都是用来定义抽象类的概念,它们在面向对象设计中扮演着重要的角色。抽象类主要用于表示一系列具有共同特征但又各自具有独特行为的具体类的抽象,而接口...

    c#中的interface abstract与virtual介绍

    C#中的`interface`、`abstract`和`virtual`是面向对象编程中的关键概念,它们在定义类的行为和结构方面起着重要作用。 首先,`interface`是C#中的一种规范,它定义了一组方法签名,但不提供具体实现。这意味着任何...

    Struct 、Class、Interface、Abstract区别与关系

    Struct 、Class、Interface、Abstract各个的特性、应用场景等对比

    Java中的interface接口

    在Java编程语言中,接口(Interface)是一种定义行为规范的关键元素,它允许我们实现多继承。接口是完全抽象的,不包含任何方法的实现,只有方法的声明、常量定义以及默认方法。Java中的接口提供了以下核心知识点: ...

    Java中interface接口与abstractclas

    在Java编程语言中,`interface`接口和`abstract class`抽象类是两种重要的面向对象设计概念,它们都用于实现多态性,但有着显著的区别。理解这些差异对于编写可扩展和可维护的代码至关重要。 首先,接口是完全抽象...

    Python3之接口类(InterfaceClass)浅谈

    在Python3中,我们可以使用`abstractmethod`装饰器和`ABCMeta`元类来创建接口类。 一、接口类的定义与作用 接口类的作用在于规定子类必须实现哪些方法,以满足特定的协议或标准。它自身不包含任何实现,只定义了...

    Java抽象类和借口的区别.pdf

    Java抽象类和借口的区别 Java抽象类和借口是Java语言中两种支持抽象类定义的机制,它们在...选择合适的机制需要根据问题领域的特点和设计理念,正确地理解和使用abstract class和interface是软件设计和开发的关键。

Global site tag (gtag.js) - Google Analytics