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


    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");
            }

        }

    结果:

  • 相关阅读:
    mysql学习笔记
    MySQL的MySQL 的JDBC的安装与使用
    numpy的使用方法
    Linux命令
    MongoDB数据库
    爬虫请求库之selenium
    解析库beautifulsoup
    Requests属性
    正向代理、反向代理
    爬虫基本原理
  • 原文地址:https://www.cnblogs.com/tenghoo/p/1205054.html
Copyright © 2020-2023  润新知