精华内容
下载资源
问答
  • 其次,对于接口来说,本身是不不可以被实例化,也不能包含任何可变数据。您给出例子是类中的变量,而不是接口。 因此,“Java接口不包含成员变量和方法实现”我认为是没有问题。[/color][/size] ...
  • 接口中的方法和成员变量

    千次阅读 2017-12-27 10:55:34
    接口Interface 1. 接口中的成员变量默认都是public、static、final类型的,必须被显式初始化 2. 接口的方法默认都是public、...4. 接口没有构造方法,不能被实例化,在接口中定义构造方法是非法的。 5. 一个接口
    接口Interface
    1. 接口中的成员变量默认都是public、static、final类型的,必须被显式初始化
    2. 接口中的方法默认都是public、abstract类型的。
    3. 接口中只能包含public、static、final类型的成员变量和public、abstract类型的成员方法。
    4. 接口没有构造方法,不能被实例化,在接口中定义构造方法是非法的。
    5. 一个接口不能实现另一个接口,但它可以继承多个其他接口。
    interface C extends A, B{} // A和B都是接口
    6. 当类实现某个接口时,它必须实现接口中所有的抽象方法,否则这个类必须被定义为抽象类。
    7. 接口中没有方法体
    访问控制修饰符
    四种访问级别:public、protected、默认、private
    private只能在同一个类中访问
    默认,只能在同一个类,同一个包中访问
    protected,可以在统一各类,同一个包,子类(子类可以不在同一个包中)访问
    public,不限制访问
    类可用修饰符: abstract、public、final
    构造方法:public、protected、private
    局部变量:仅仅final
    abstract修饰符
    1. 抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类。
    2. 没有抽象构造方法,没有抽象静态方法。 static 和 abstract不能连用
    3. 抽象类中可以有非抽象的构造方法,创建子类的实例时可能会调用这些构造方法。
    4. 抽象类及抽象方法不能被final修饰符修饰。final和abstract 不能连用,同样private和abstract不能连用。
    5. 抽象类不能被实例化。因为抽象类可能含有没有方法体的抽象方法
    final修饰符
    final具有;不可改变的;含义,它可以修饰非抽象类,非抽象成员方法和变量
    1. 用final修饰的类不能被继承,没有子类。
    2. 用final修饰的方法不能被子类的方法覆盖。
    3. 用final修饰的变量表示常量,只能被赋一次值,必须被显式初始化。
    4. private修饰的方法默认为是final方法,因而不能被子类的方法覆盖。
    static修饰符
    1. 静态变量在内存中只有一个拷贝,在类的所有实例中共享。
    2. 在静态方法中不能直接访问实例方法和实例变量。
    3. 在静态方法中不能使用this和super关键字。
    4. 静态方法不能被abstract修饰
    5. 静态方法和静态变量都可以通过类名直接被访问。
    6. 当类被加载时,静态代码块只被执行一次。类中不同的静态代码块按它们在类中出现的顺序被依次执行
    public static void main(String args[]) {} 程序入口方法,可以被final修饰。
    super关键字
    1. 在类的构造方法中,通过super语句调用这个类的父类的构造方法。
    在构造方法中,super语句必须作为构造方法的第一条语句。
    2. 在子类中访问父类的被屏蔽的方法和属性
    3. 只能在构造方法或实例方法内使用super关键字。 super关键字与类的特定实例相关
    方法覆盖(方法重写)
    1. 方法的参数签名和返回值类型必须相同,访问控制修饰符可以不同,但是子类方法不能缩小父类方法的访问权限。
    2. 子类方法抛出的异常必须和父类方法抛出的异常相同,或者是父类方法抛出的异常类的子类。
    3. 父类的静态方法是不能被子类覆盖为非静态方法。
    父类的非静态方法不能被子类覆盖为静态方法。
    4. 子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法。区别:运行时,JVM把静态方法和所属的类绑定,而把实例方法和所属的实例绑定。
    5. 父类的私有方法不能被覆盖
    6. 父类的非抽象方法可以被覆盖为抽象方法
    方法重(chong)载
    1. 在一个类中不允许两个方法名相同,并且参数签名也完全相同的方法。
    2. 类的同一种功能,可能有多种实现,到底采用哪种实现方式,取决于调用者给定的参数。
    3. 对于类的方法(包括从父类中继承的方法),如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的重载方法。
    多态
    1. 对于一个引用类型的变量,Java编译器按照它声明的类型来处理。
    Base base = new Sub();
    base.subMethod(); // 编译出错,Base基类,Sub子类,编译器认为base是Base类型的引用变量,Base类没有subMethod()方法。这样子,就必须使用强制转换。(Sub)(base).subMethod();
    2. 对于一个引用类型的变量,运行时JVM按照它实际引用的对象来处理。
    Base base = new Base();
    Sub sub = (Sub)base; // 编译通过,但是运行时抛出ClassCastException
    在运行时,子类的引用类型变量可以转换为父类的引用类型,而相反的过程却不可以。
    假定可以,即上边两行代码运行正常,那么sub.subMethod(); 执行时,JVM将找不到subMethod。sub实际引用的是Base类的实例。
    3. 在运行时环境中,通过引用类型变量来访问所引用对象的方法和属性时,JVM采用以下的绑定规则。
    ①实例方法与引用变量实际引用的对象的方法绑定,即动态绑定。
    ②静态方法与引用变量所声明的类型的方法绑定,即静态绑定。 编译阶段即绑定完成。
    ③成员变量(静态变量和实例变量) 与引用类型所声明的类型的成员变量绑定。静态绑定。
    展开全文
  • 1. 成员变量,在接口中其实就是常量,格式: [public] [static] [final] 数据类型 常量名称 = 数据值; - 赋值:常量必须进行赋值,而且一旦赋值不能改变。 - 书写格式:常量名称完全大写,用下划线进行分隔。 2....

    一、接口的使用步骤

    1. 接口不能直接使用,必须有一个“实现类”来“实现”该接口,格式:
    public class 实现类名称 implements 接口名称 {
        // ...
    }
    
    1. 接口的实现类必须覆盖重写(实现)接口中所有的抽象方法。如果实现类并没有覆盖重写接口中所有的抽象方法,那么这个实现类自己就必须是抽象类。

    2. 创建实现类的对象,进行使用。

    二、接口内容

    不同java版本中,接口可包含的内容不同:
    Java 7

    • 常量
    • 抽象方法

    Java 8

    • 默认方法
    • 静态方法

    Java 9

    • 私有方法

    在Java 9+版本中,接口的内容可以有:

    1. 成员变量

    在接口中其实就是常量,格式:

    [public] [static] [final] 数据类型 常量名称 = 数据值;
    

    注意事项:
    1.可以省略public static final,默认是这样。
    2.必须进行赋值,一旦赋值不可修改。
    3. 接口中常量的名称,使用完全大写的字母(shift+F6),用下划线进行分隔。(推荐命名规则)

    public interface MyInterfaceConst {
        // 这其实就是一个常量,一旦赋值,不可以修改
        public static final int NUM_OF_MY_AGE = 12;
    
    }
    

    2.抽象方法,格式:

    [public] [abstract] 返回值类型 方法名称(参数列表);
    
    - 覆盖:实现类必须覆盖重写接口所有的抽象方法,否则实现类是抽象类。
    

    4. 从Java 8开始,接口里允许定义默认方法,格式:

    [public] default 返回值类型 方法名称(参数列表) { 
       方法体 
    }
    

    为什么要增加默认方法?
    ----- 为了解决接口升级的问题
    ----- lambda表达式和函数式编程(待补充)

    问题情境:
    考虑这样的情景,存在抽象类Aniamls,在抽象类Aniamls中只包含抽象方法eat(),类sheep和类Tiger都实现了该抽象类,至此一切安好。
    但是考虑到接口的不完整性,现需要对接口做升级,在接口中添加抽象方法drink()。此时,先前的两个该抽象类的实例类将会报错。

    解决办法:

    • 在接口升级时需要增加方法时,给该方法定义默认方法 default。
    • 那些没有覆盖重写该方法的类,则执行接口中的方法体;
    • 而想要重新定义该方法的实现类,则可重写该方法。

    例子:

    public interface MyInterfaceDefault {
    
        // 抽象方法
        public abstract void methodAbs();
    
        // 新添加了一个抽象方法,不使用default的话,下面的类MyInterfacedefaultA会报错
    //    public abstract void methodAbs2();
    
        // 将新添加的方法,改成默认方法,BingGo!
        public default void methodDefault() {
            System.out.println("这是新添加的默认方法");
        }
    
    }
    
    public class MyInterfaceDefaultA implements MyInterfaceDefault {
        @Override
        public void methodAbs() {
            System.out.println("实现了抽象方法,AAA");
        }
    }
    public class MyInterfaceDefaultB implements MyInterfaceDefault {
        @Override
        public void methodAbs() {
            System.out.println("实现了抽象方法,BBB");
        }
    
        @Override
        public void methodDefault() {
            System.out.println("实现类B覆盖重写了接口的默认方法");
        }
    }
    
    public class Demo02Interface {
    
        public static void main(String[] args) {
            // 创建了实现类对象a
            MyInterfaceDefaultA a = new MyInterfaceDefaultA();
            a.methodAbs(); // 调用抽象方法,实际运行的是右侧实现类。
            a.methodDefault(); // 这是新添加的默认方法 //虽然 MyInterfaceDefaultA中没有重写,自动向上找接口
    
            System.out.println("==========");
            
    		// 创建了实现类对象b
            MyInterfaceDefaultB b = new MyInterfaceDefaultB();
            b.methodAbs();
            b.methodDefault(); // 实现类B覆盖重写了接口的默认方法
        }
    
    }
    

    5. 从Java 8开始,接口里允许定义静态方法,格式:

    [public] static 返回值类型 方法名称(参数列表) { 
    	方法体 
    }
     - 应该通过接口名称进行调用,不能通过实现类对象调用接口静态方法
    

    static: 同类对象共享的内容,静态方法使用类名调用而不是对象名
    接口的静态方法:

    • 不能通过接口实现类的对象来调用接口当中的静态方法。
    • 通过接口名称,直接调用其中的静态方法: 接口名称.静态方法名(参数);
    /**
    *	定义接口
    **/
    public interface MyInterfaceStatic {
        public static void methodStatic() {
            System.out.println("这是接口的静态方法!");
        }
    }
    
    /**
    *	接口实现类
    **/
    public class MyInterfaceStaticImpl implements MyInterfaceStatic{
    	//接口MyInterfaceStatic没有抽象方法,因此无需覆盖
    }
    /**
    *类的实例化及接口的静态方法使用
    **/
    public class Demo03Interface {
        public static void main(String[] args) {
            // 创建了实现类对象
            MyInterfaceStaticImpl impl = new MyInterfaceStaticImpl();
    
            // 错误写法!
    //        impl.methodStatic();
    
            // 直接通过接口名称调用静态方法
            MyInterfaceStatic.methodStatic();
        }
    }
    

    7. 从Java 9开始,接口里允许定义私有方法

    普通私有方法:
    private 返回值类型 方法名称(参数列表) { 
    	方法体
    }
    
    静态私有方法:
    private static 返回值类型 方法名称(参数列表) { 
    	方法体 
    }
    
    为什么要增加私有方法?
    问题情境:

    考虑这样的情景,在接口中包含两个默认方法,这两个默认方法中有重复代码。

    解决办法:

    我们需要抽取一个共有方法,用来解决两个默认方法之间重复代码的问题。但是这个共有方法仅限接口中使用,不应该让实现类使用,应该是私有化的。
    如此,接口中的私有方法诞生了~

    //接口中的普通私有方法
    //解决接口中默认方法的重复代码问题
    public interface MyInterfacePrivateA {
    
        public default void methodDefault1() {
            System.out.println("默认方法1");
            methodCommon();
        }
    
        public default void methodDefault2() {
            System.out.println("默认方法2");
            methodCommon();
        }
    
        private void methodCommon() {
            System.out.println("AAA");
            System.out.println("BBB");
            System.out.println("CCC");
        }
    
    }
    
    
    //接口中的静态私有方法
    //解决多个静态方法之间的重复代码问题
    public interface MyInterfacePrivateB {
    
        public static void methodStatic1() {
            System.out.println("静态方法1");
            methodStaticCommon();
        }
    
        public static void methodStatic2() {
            System.out.println("静态方法2");
            methodStaticCommon();
        }
    
        private static void methodStaticCommon() {
            System.out.println("AAA");
            System.out.println("BBB");
            System.out.println("CCC");
        }
    
    }
    

    三、接口特点

    1.接口是没有静态代码块或者构造方法的。

    public interface MyInterfaceB {
        // 错误写法!接口不能有静态代码块
    //    static {
    //
    //    }
        // 错误写法!接口不能有构造方法
    //    public MyInterfaceA() {
    //
    //    }
    }
    
    1. 一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。
    public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB {
        // 覆盖重写所有抽象方法
    }
    

    3.如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。

    public interface MyInterfaceA {
        public abstract void methodAbs();
    }
    public interface MyInterfaceB {
        public abstract void methodAbs();
    } 
    public class MyInterfaceImpl /*extends Object*/ implements MyInterfaceA, MyInterfaceB {
        @Override
        public void methodAbs() {
            System.out.println("覆盖重写了AB接口都有的抽象方法");
        }
    }
    

    4.如果实现类所实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。
    不同于3中存在重复抽象方法,4中重复的默认方法都有方法体,一个朝东一个朝西,所以必须覆盖重写。

    public interface MyInterfaceA {
        public default void methodDefault() {
            System.out.println("默认方法AAA");
        }
    }
    public interface MyInterfaceB {
        public default void methodDefault() {
            System.out.println("默认方法BBB");
        }
    }
    public class MyInterfaceImpl /*extends Object*/ implements MyInterfaceA, MyInterfaceB {
        @Override
        public void methodDefault() {
            System.out.println("对多个接口当中冲突的默认方法进行了覆盖重写");
        }
    }
    

    5.如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。abstract class
    6. 一个类如果直接父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类当中的方法。

    public class Zi extends Fu implements MyInterface {
    }
    

    类与接口的关系

    1.类与类之间是单继承的。直接父类只有一个。

    2.类与接口之间是多实现的。一个类可以实现多个接口。

    3.接口与接口之间是多继承的。

    1. 多个父接口当中的抽象方法如果重复,没关系。
    2. 多个父接口当中的默认方法如果重复,那么子接口必须进行默认方法的覆盖重写,【而且带着default关键字】。
    public interface MyInterfaceA {
    
        public abstract void methodA();
        
    	//父接口中重复的抽象方法
        public abstract void methodCommon();
    
    	//父接口中重复的默认方法,需要重写
        public default void methodDefault() {
            System.out.println("AAA");
        }
    
    }
    
    public interface MyInterfaceB {
    
        public abstract void methodB();
        
    	//父接口中重复的抽象方法
        public abstract void methodCommon();
    
    	//父接口中重复的默认方法,需要重写
        public default void methodDefault() {
            System.out.println("BBB");
        }
    
    }
    
    public interface MyInterface extends MyInterfaceA, MyInterfaceB {
    
        public abstract void method();
    
        @Override
        public default void methodDefault() {
    
        }
    }
    

    四、接口可以用作:

    • 成员变量类型
    • 方法参数
    • 方法返回值
    展开全文
  • 与Java不同,C#中的接口不能包含域(Field)。另外还要注意,C#中,显式为接口的方法指定public修饰符是非法的。 综上,所以c#接口中不允许使用static~~因为他的接口中没有field这个概念,与java不同,而java...

    我印象中java里面的接口使用static final修饰的常量,不是成员方法,使用static修饰的method放在接口中是无意义的,接口是用来抽象的。。。。
    与Java不同,C#中的接口不能包含域(Field)。另外还要注意,在C#中,显式为接口的方法指定public修饰符是非法的。
    综上,所以c#接口中不允许使用static~~因为他的接口中没有field这个概念,与java不同,而java中使用static的也正是field,而不是method!

    接口不实现方法,static是静态调用,调用不实现的方法,有意义吗?
    接口里的方法是通过接口映射表来调用实现的(vmt),用virtual没有意义..
    接口里不实现方法,自然override重写就没意义了..
    接口是全部抽象的,既然全都是抽象,就没必要用abstract标明了.

    接口里的方法是通过调用拥有此接口的类来调用的(或显示地调用接口的某方法).在此类的声明中,必须有定义此接口的此方法实现.再来看下static:静态字段、静态属性可以在类的实例之间共享(也就是任何类的某对象可以直接使用静态字段,注意是对象在使用静态字段、属性)。而静态方法的使用只需此类名调用即可(不是用此类的对象去调用,即,不能声明此类的一个对象去调用静态方法,它与对象无关),另外,静态方法必须是个有具体代码的方法,不能是空方法.因为任何一个编译器在编译时都必须非常清楚地知道此方法是要如何地被执行.static是让成员在其对象上进行共享的,而abstract一定是要让其继承,让其重载,让其有另一套,故不能用static修饰接口里的成员变量.

    字段、方法、属性用static声明,表示它们是类的静态成员,而不是对象实例的成员。

    这样看来,因为接口本身就是abstract,一定是abstract的.故,它的所有成员都一定是abstract,不需要用abstract去显示地声明成员,若显示地声明了,也没大错,只是没有意义而已(因为大家都知道你一定就是abstract,不需要叫你名字的时候再特意重声下abstract,没意义).因为接口的所有成员一定是abstract,故接口的所有方法不能有任何实现代码(即一定要被调用它的类在定义时重载,故不用virtual修改方法,同上面不需要用abstract修改一样的道理).所以,接口的所有方法在声明时,不需要使用virtul,override关键字来修饰.

    参考资料: http://blog.csdn.net/chinmusam/archive/2010/04/18/5499445.aspx

    展开全文
  • 接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。 接口和类都可以包含事件、索引器、属性。 接口只能定义方法。 1. 类 类的分类有:抽象类(abstract)、密封类(sealed)、静态类(static) 1.1 ...
  • 接口中的方法

    千次阅读 2018-05-25 20:58:14
    接口的方法 |接口Interface1. 接口中的成员变量默认都是public、static、final类型的,必须被显式初始化2. 接口的方法默认都是...4. 接口没有构造方法,不能被实例化,在接口中定义构造方法是非法的。5. 一个接...

    接口中的方法    

    |

    接口Interface
    1. 接口中的成员变量默认都是public、static、final类型的,必须被显式初始化
    2. 接口中的方法默认都是public、abstract类型的。
    3. 接口中只能包含public、static、final类型的成员变量和public、abstract类型的成员方法。
    4. 接口没有构造方法,不能被实例化,在接口中定义构造方法是非法的。
    5. 一个接口不能实现另一个接口,但它可以继承多个其他接口。
    interface C extends A, B{} // A和B都是接口
    6. 当类实现某个接口时,它必须实现接口中所有的抽象方法,否则这个类必须被定义为抽象类。
    7. 接口中没有方法体
    访问控制修饰符
    四种访问级别:public、protected、默认、private
    private只能在同一个类中访问
    默认,只能在同一个类,同一个包中访问
    protected,可以在统一各类,同一个包,子类(子类可以不在同一个包中)访问
    public,不限制访问
    类可用修饰符: abstract、public、final
    构造方法:public、protected、private
    局部变量:仅仅final
    abstract修饰符
    1. 抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类。
    2. 没有抽象构造方法,没有抽象静态方法。 static 和 abstract不能连用
    3. 抽象类中可以有非抽象的构造方法,创建子类的实例时可能会调用这些构造方法。
    4. 抽象类及抽象方法不能被final修饰符修饰。final和abstract 不能连用,同样private和abstract不能连用。
    5. 抽象类不能被实例化。因为抽象类可能含有没有方法体的抽象方法
    final修饰符
    final具有;不可改变的;含义,它可以修饰非抽象类,非抽象成员方法和变量
    1. 用final修饰的类不能被继承,没有子类。
    2. 用final修饰的方法不能被子类的方法覆盖。
    3. 用final修饰的变量表示常量,只能被赋一次值,必须被显式初始化。
    4. private修饰的方法默认为是final方法,因而不能被子类的方法覆盖。
    static修饰符
    1. 静态变量在内存中只有一个拷贝,在类的所有实例中共享。
    2. 在静态方法中不能直接访问实例方法和实例变量。
    3. 在静态方法中不能使用this和super关键字。
    4. 静态方法不能被abstract修饰
    5. 静态方法和静态变量都可以通过类名直接被访问。
    6. 当类被加载时,静态代码块只被执行一次。类中不同的静态代码块按它们在类中出现的顺序被依次执行
    public static void main(String args[]) {} 程序入口方法,可以被final修饰。
    super关键字
    1. 在类的构造方法中,通过super语句调用这个类的父类的构造方法。
    在构造方法中,super语句必须作为构造方法的第一条语句。
    2. 在子类中访问父类的被屏蔽的方法和属性
    3. 只能在构造方法或实例方法内使用super关键字。 super关键字与类的特定实例相关
    方法覆盖(方法重写)
    1. 方法的参数签名和返回值类型必须相同,访问控制修饰符可以不同,但是子类方法不能缩小父类方法的访问权限。
    2. 子类方法抛出的异常必须和父类方法抛出的异常相同,或者是父类方法抛出的异常类的子类。
    3. 父类的静态方法是不能被子类覆盖为非静态方法。
    父类的非静态方法不能被子类覆盖为静态方法。
    4. 子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法。区别:运行时,JVM把静态方法和所属的类绑定,而把实例方法和所属的实例绑定。
    5. 父类的私有方法不能被覆盖
    6. 父类的非抽象方法可以被覆盖为抽象方法
    方法重(chong)载
    1. 在一个类中不允许两个方法名相同,并且参数签名也完全相同的方法。
    2. 类的同一种功能,可能有多种实现,到底采用哪种实现方式,取决于调用者给定的参数。
    3. 对于类的方法(包括从父类中继承的方法),如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的重载方法。
    多态
    1. 对于一个引用类型的变量,Java编译器按照它声明的类型来处理。
    Base base = new Sub();
    base.subMethod(); // 编译出错,Base基类,Sub子类,编译器认为base是Base类型的引用变量,Base类没有subMethod()方法。这样子,就必须使用强制转换。(Sub)(base).subMethod();
    2. 对于一个引用类型的变量,运行时JVM按照它实际引用的对象来处理。
    Base base = new Base();
    Sub sub = (Sub)base; // 编译通过,但是运行时抛出ClassCastException
    在运行时,子类的引用类型变量可以转换为父类的引用类型,而相反的过程却不可以。
    假定可以,即上边两行代码运行正常,那么sub.subMethod(); 执行时,JVM将找不到subMethod。sub实际引用的是Base类的实例。
    3. 在运行时环境中,通过引用类型变量来访问所引用对象的方法和属性时,JVM采用以下的绑定规则。
    ①实例方法与引用变量实际引用的对象的方法绑定,即动态绑定。
    ②静态方法与引用变量所声明的类型的方法绑定,即静态绑定。 编译阶段即绑定完成。
    ③成员变量(静态变量和实例变量) 与引用类型所声明的类型的成员变量绑定。静态绑定。
    展开全文
  • 抽象类 用 abstract class 来定义,接口用 interface 来定义 抽象类中可以有普通成员变量,接口中没有,接口变量都是被public static...抽象类中可以包含静态方法,接口中不能包含静态方法。 一个类可以实现多个接.
  • Java中的接口

    2018-04-17 16:14:57
    接口不能包含成员变量,除了 static 和 final 变量。接口不是被类继承了,而是要被类实现。接口支持多继承接口与类相似点:一个接口可以有多个方法。接口文件保存 .java 结尾的文件,文件名使用接口名。接口的...
  • 在 C# 8 之前,接口不能包含方法定义,只能在接口中定义方法签名,还有一个就是接口的成员默认是 public 和 abstract , 在 C# 8 之前,接口不能包含字段,也不能包含private, protected, 或者 internal 的方法成员。...
  • 您只能在接口中包括方法声明,并且默认情况下,接口的成员是公共的和抽象的。 此外,在C#8.0之前,接口不能包含字段,也不能具有私有成员,受保护成员或内部成员。 如果在接口中引入了新成员(即方法声明),则必....
  • 在 C# 8 之前,接口不能包含方法定义,只能在接口中定义方法签名,还有一个就是接口的成员默认是 public 和 abstract , 在 C# 8 之前,接口不能包含字段,也不能包含private, protected, 或者 internal 的方法成员。...
  • C#中的接口

    2012-02-28 15:53:13
    接口具有下列属性: 接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。 ...不能直接实例化接口。...如果类实现两个接口,并且这两个接口包含具有相同签名的成员,那么
  • 关于C#中的接口

    2015-10-09 21:16:14
    接口(Interface)是当把多个继承类中的公共对象部分抽象出来,并封装这些对象行为。接口是为了继承而存在,如果没有继承,接口就不需要存在。...5.接口不能包含任何字段; 6.接口描述可以属于任何类或结构一组
  • 都是“虚的”---不能被实例化,这也是接口为什么不能包含字段--成员变量的原因(很简单,成员变量只能属于类的示例,而且C#规定变量使用前必须初始化,这同接口的“虚”的性质矛盾)。 2。正因为接口是虚...
  • 都是“虚”不能被实例化,这也是接口为什么不能包含字段--成员变量原因。 2.正因为接口是虚,所以接口内索引,属性,时间等只能有声明,而不能在接口内实现,具体如何实现是派生接口或者派生类事。 3.都具有...
  • 中包含属性和具体方法体。 (2)抽象类:由abstarct修饰class;不能被实例化;可以有自己属性,也可以有抽象和非抽象方法。 (3)接口:关键字interface;不能实例化;声明方法需要子类实现,成员变量...
  • C#接口和类有什么异同?...接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。 接口和类都可以包含事件、索引器、属性。 接口只能定义方法。 1. 类 类的分类有:抽象类(abstr...
  • 2.抽象类中可以有构造方法,接口中不能有构造方法 3.抽象类中所有方法并不一定要是抽象,你可以选择抽象类中实现一些基本方法。而接口要求所有方法都必须是抽象 4.抽象类中可以包含静态方法,接口中不...
  • C#中的接口

    2007-09-17 19:19:34
    都是“虚”不能被实例化,这也是接口为什么不能包含字段、成员变量原因 2.正因为接口是虚,所以接口内索引、属性、时间等只能有声明,而不能在接口内实现,具体如何实现是派生接口或者派生类事.3.都具有...
  • 在抽象类,可以包含一个或多个抽象方法,但是在接口中,所有的方法必须是抽象的,不能有方法体,他比抽象类更加的抽象。接口规定一个类必须做什么而不规定他如何去做。 接口生命的成员变量默认都是...
  • 接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。 接口和类都可以包含事件、索引器、方法和属性。 基础知识:接口只能定义方法(只能定义行为,不能定义实现也就是字段),因为事件、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 834
精华内容 333
关键字:

在接口的成员中不能包含