基本类型--接口(一、您了解接口继承吗?)

141类和接口继承

142定义接口

143接口的继承

 public static class Program
    
{
        
static void Main(String[] args) 
           
//-------------------------
            Console.WriteLine("---第一个例子---");
            BaseClass b 
= new BaseClass();
            b.fun1();
            b.fun2();
            ((Itest)b).fun1();
            ((Itest)b).fun2();
           
//--------------------------
            Console.WriteLine("---第二个例子---");
            SonOne s1 
= new SonOne();
            s1.fun1();
            s1.fun2();
            ((Itest)s1).fun1();
            ((Itest)s1).fun2();
          
//----------------------------
            Console.WriteLine("---第三个例子---");
            b 
= new SonOne();
            b.fun1();
            b.fun2();
            ((Itest)b).fun1();
            ((Itest)b).fun2();
          
//----------------------------
            Console.WriteLine("---第四个例子---");
            SonTwo s2 
= new SonTwo();
            s2.fun1();
            s2.fun2();
            ((Itest)s2).fun1();
            ((Itest)s2).fun2();
          
//----------------------------
            Console.WriteLine("---第五个例子---");
            b 
= new SonTwo();
            b.fun1();
            b.fun2();
            ((Itest)b).fun1();
            ((Itest)b).fun2();
        
//----------------------------
            Console.ReadLine();
        }

    }

    
public interface Itest {
        
void fun1();
        
void fun2();
    }

    
//1.BaseClass必须实现Itest中的所有方法 fun1,fun2
    
//2.应将接口方法标记为virtual,如果不显示标记,编译器会把它标记为virtual和sealed。这样派生类就无法重写接口方法了。
    
//  派生类可以重新继承同一个接口,并提供自己的实现。
    internal  class BaseClass : Itest {
        
//fun1将被标记为sealed,不能被重写
        public void fun1() {
            Console.WriteLine(
"BaseClass.fun1");
        }

        
public virtual void fun2()
        
{
            Console.WriteLine(
"BaseClass.fun2");
        }

    }

    
internal class SonOne : BaseClass {
        
//派生类无法重写基类方法fun1
        new public void fun1() {
            Console.WriteLine(
"SonOne.fun1");
        }

        
//派生类可以重写基类方法fun2
        public override void fun2()
        
{
            Console.WriteLine(
"SonOne.fun2");
        }

    }

    
internal class SonTwo : BaseClass, Itest 
    
{
        
//派生类无法重写基类方法fun1,new表示重新实现Itest的fun1
        new public void fun1()
        
{
            Console.WriteLine(
"SonOne.fun1");
        }

        
//派生类可以重写基类方法fun2
        public override void fun2()
        
{
            Console.WriteLine(
"SonOne.fun2");
        }

    }

结果:

posted @ 2008-05-22 17:04  青羽  阅读(1258)  评论(0编辑  收藏  举报