Java和C#接口默认方法

默认方法是什么

在Java1.8和C#8.0之后,都新增了接口的默认方法,即在接口中支持方法的默认实现,而不必在所有实现类中另外做实现,减小了实现类的修改工作量

两种语言的区别

Java:默认实现用default修饰,方法的访问级别为public,外部和实现类可以访问接口中的所有方法,

interface IA {
  String getValue();
  
  default void printString(String value) {
      System.out.println(value);
  }
}

class A implements IA {
    public String getValue() {
        return "Hello world";
    }
}

class test  
{
	public static void main (String[] args)
	{
        IA a = new A();
        a.printString(a.getValue());
	}
}

C#:默认实现支持几乎所有的访问修饰符,子接口可以继承的方法和常规类的继承规则相同,但实现类不继承(或者叫隐藏)默认实现方法

支持的访问修饰符private 、 protected 、 internal 、 public 、 virtual、 abstract、 sealed、 static、 extern 和 partial 

using System;

class Test
{
    static void Main(string[] args)
    {
        IA a = new A();
        a.PrintString();
    }
}

interface IA
{
    protected string GetValue();

    void PrintString()
    {
        Console.WriteLine(GetValue());
    }
}

interface IB : IA
{
    private void CallPrintString()
    {
        PrintString();
    }
}

class A : IA
{
    string IA.GetValue()
    {
        return "Hello world";
    }

    //void CallPrintString()
    //{
    //    PrintString();  
    //}
}

需要注意的是,在类A中中是无法调用接口IA中的PrintString方法的错误    CS0103    当前上下文中不存在名称“PrintString” ,但在接口IB中是没有问题的

后记

C#中接口的访问修饰符可以保证接口不对外暴露私密的方法,Java想实现类似的方法可以用抽象类继承接口,实现类再继承抽象类,在抽象类中定义需要隐藏起来的逻辑

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值