c#的接口

c#不支持多继承,所以引入接口,下面谈谈接口的特点

/*接口:定义用    interface 接口名 { 返回类型 方法名(参数);}

 *         接口中方法不能有访问修饰符,默认为共有
 *         在接口中可以定义属性、事件、索引器、方法
 *         不可以定义:字段,运算符重载,实例构造函数,析构函数
 *         接口不能使用static关键字
 * 
 * 1、 接口可以理解为对一组方法声明的统一命名,但这些方法没有实现,
 *       继承于该接口的类必须实现接口中的方法
 * 显示实现接口
 * 1、方法不能使用任何访问修饰符,默认为私有
 * 2、由于显示实现的成员默认为私有,所以对象不能调用,需要转换为对应的接口
 * 3、实现多个接口时,推荐使用显示的方式
 * 接口与抽象类
 * 1、抽象类使用abstract关键字   接口使用interface
 * 2、都不能实例化成员
 * 3、抽象类可以包含虚方法、非抽象方法、静态成员
 * 4、接口不能包含虚方法和任何静态成员,接口只能定义方法,不能实现方法
 * 5、抽象类不能实现多继承,接口支持多继承
 * 

*/

下面是继承一个接口的例子,可以用对象调用接口中的方法,

using System;
namespace 接口
{
    interface ICustomCompare
    {
        int compareTo(object obj);//接口里的方法是共有的
    }
    public class Person:ICustomCompare
    {
        private int age;
        public int Age
        {
            set{ age = value;}
            get{ return age;}
        }
        public int compareTo(object obj)//必须用public 
        {
            Person p = (Person)obj;
            if (this.age > p.age) {
                return 1;
            } else if(this.age < p.age)
            {
                return -1;
            }else{
                return 0;
            }
        }
    }
    class MainClass
    {
        
        public static void Main (string[] args)
        {
            Person p1 = new Person ();
            p1.Age = 18;
            Person p2 = new Person ();
            p2.Age = 19;
            if (p1.compareTo (p2) == -1) {
                Console.WriteLine ("big");
            } else if (p1.compareTo (p2) == 1) {
                Console.WriteLine ("small");
            } else {
                Console.WriteLine ("equal");
            }
        }
    }
}

下面是一个继承多个接口的例子,注意实现接口和调用接口的方法不同

using System;

namespace 接口
{
    interface IChineseFreeting
    {
        void sayHello();
    }
    interface IAmericanGreeting
    {
        void sayHello();
    }
    class Speaker:IChineseFreeting,IAmericanGreeting
    {
         void IChineseFreeting.sayHello()//用接口名.方法名
        {
            Console.WriteLine ("你好");
        }
         void IAmericanGreeting.sayHello()
        {
            Console.WriteLine ("hello");
        }
    }
    class MainClass
    {
        public static void Main (string[] args)
        {
            Speaker s = new Speaker ();
            IAmericanGreeting ame = (IAmericanGreeting)s;
            ame.sayHello ();
        }
    }
}

首先,基于XML配置的方式,可以在web.xml文件中配置servlet类的访问映射。具体步骤如下: 1. 在web.xml文件中添加servlet的配置信息,包括servlet的名称、类名、初始化参数等。例如: ``` <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> <init-param> <param-name>param1</param-name> <param-value>value1</param-value> </init-param> </servlet> ``` 2. 在web.xml文件中添加servlet映射的配置信息,将servlet与URL进行对应。例如: ``` <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/myservlet</url-pattern> </servlet-mapping> ``` 这样,当访问URL为“/myservlet”的时候,就会调用名为“MyServlet”的servlet类。 其次,基于注解的方式,可以使用@WebServlet注解来配置servlet类的访问映射。具体步骤如下: 1. 在servlet类上添加@WebServlet注解,指定URL模式。例如: ``` @WebServlet("/myservlet") public class MyServlet extends HttpServlet { //... } ``` 2. 可以在@WebServlet注解中添加其他属性,例如name、initParams等。例如: ``` @WebServlet(name = "MyServlet", urlPatterns = {"/myservlet"}, initParams = {@WebInitParam(name = "param1", value = "value1")}) public class MyServlet extends HttpServlet { //... } ``` 这样,当访问URL为“/myservlet”的时候,就会调用名为“MyServlet”的servlet类。 需要注意的是,基于注解的方式需要在Servlet容器中启用注解扫描功能,例如在web.xml文件中添加以下内容: ``` <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/myservlet</url-pattern> </servlet-mapping> <listener> <listener-class>org.apache.catalina.core.AprLifecycleListener</listener-class> </listener> <servlet-container> <jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <scripting-invalid>true</scripting-invalid> </jsp-property-group> </jsp-config> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/servlets/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> <jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <scripting-invalid>true</scripting-invalid> </jsp-property-group> </jsp-config> <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> <init-param> <param-name>param1</param-name> <param-value>value1</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/myservlet</url-pattern> </servlet-mapping> </servlet-container> </web-app> ``` 其中,<servlet>和<servlet-mapping>标签用于基于XML配置的方式,<servlet-container>标签用于启用注解扫描功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值