zoukankan      html  css  js  c++  java
  • Delphi7 (第一天:类的编写)续

    program Project1;
    
    {$APPTYPE CONSOLE}
    
    uses
      SysUtils,
      Unit1 in 'Pas\Unit1.pas';
    
      var
        p:Person;
    begin
              p:=  Person.Create;//抽象方法一样可以实例化,但是会出现警告语句
              p.setName('Delphi作者');
              p.setAge(0);
              p.setSex('变态');
              p.speak;
              p.Destroy;//一般使用Free,Free方法对P进行判断,如果不为nil,那么就Destroy;
              Readln;
    end.
    
    
        {
    1. 接口和类的不同
    
    (1)接口中只有方法、属性,没有字段。所以接口中的属性存取都必须通过方法。
    
    (2)接口中的方法只有声明,没有实现。实现在类中完成。
    
    (3)接口中的方法没有作用域。都是公开的,但是在类中则放到不同作用域。
    
    (4)接口中的方法没有修饰字。可以认为它们都是抽象的。
    
    (5)不能创建接口实例,要使用接口,必须在类中实现,通过类调用接口的方法。
    
    (6)在类中必须声明和实现接口的所有方法。不像类继承中可以选择。
    
    (7)接口中的方法在类中实现时,可以加virtual/dynamic、abstract修饰,从而在子类中可以实现覆盖。
    {
    类从TObject继承,接口从IUnknown继承(= =! 接口也有祖先)。
               }
    //ChildInterface = interface(ParentInterface)
    //['{GUID}']
    //{方法列表}
    //end;
    
    //其中的['{GUID}'](Globally Unique Identifier,全球惟一标示)称为接口标示。
    //COM类等可以有GUID标示。这样我们可以通过GUID得到对应的接口或者COM类(实例)。
    //接口标示不是必须的。在IDE环境中,按Ctrl+Shift+G键可以产生GUID,也可以调用API函数CoCreateGuid得到
    //。如果父接口定义了标示而它的子接口没有定义,该标示不会继承到子接口,此时子接口被认为没有标示。
    //Delphi的SysUtils单元提供了GUID和String之间的转换函数StringToGUID、GUIDToString。
     //  }
    //摘自:http://blog.csdn.net/jiangwzh/article/details/7407086
    
    unit Unit1;
    
    {
      public :派生类可以直接访问基类中的public数据
      private:基类中的private不允许在派生类中访问,但是也有例外,
                若基类和子类在同一个单元文件中,则可以访问,
                若不在同一个单元文件则不能访问
      protected:基类中的protected在子类中成为private
    
    }
    interface
    type
    
       Person=class(TObject)  //继承的用法(父类)
        private
                       name:string;
                       age:Integer;
                       sex:string;
       public
               constructor create(name:string;age:Integer);overload;          //若定义两个构造函数,或者重载一个同名函数,需要使用overLoad,
                                                                              //如果子类需要覆写父类中的方法,则方法需要被virsual修饰
                                                                              //而子类中需要使用override修饰该方法或者过程
               constructor  create(name:string;age:Integer;sex:string);overload;   //构造函数
               procedure setName(name:string);
               function  getName:string;
               procedure setAge(age:Integer);
               function  getAge:Integer;
               procedure setSex(sex:string);
               function  getSex:string;
               procedure  speak;
               procedure run();virtual;abstract;       //定义抽象方法,在实现区域不能实现该抽象方法,必须由子类实现,不能在实现部分出现该过程的声明
               //destructor Destroy;overload;       //析构函数
    
    end;
    
    
    implementation
            constructor person.create(name:string;age:Integer);
            begin
                           Self.name:=name;
                           Self.age:=age;
            end;
               constructor person.create(name:string;age:Integer;sex:string);
               begin
                           Self.name:=name;
                           Self.age:=age;
                           Self.sex:=sex;
               end;
               procedure Person.setName(name:string);
               begin
                       Self.name:=name;
               end;
               function   Person.getName:string;
               begin
                      Result:= Self.name;
               end;
               procedure Person. setAge(age:Integer);
               begin
                       Self.age:=age;
               end;
               function   Person.getAge:Integer;
               begin
                       Result:=Self.age;
               end;
               procedure  Person.setSex(sex:string);
               begin
                       Self.sex:=sex;
               end;
               function   Person.getSex:string;
               begin
                       Result:=Self.sex;
               end;
               procedure person.speak;
               begin
                       Writeln('写的真慢');
               end;
    
              { destructor Person.Destroy;overload;
               begin
                            inherited Destroy;
               end;  }
    end.
    

      

  • 相关阅读:
    springboot项目使用restTemplate调用php接口返回数据及所遇问题
    idea创建spring项目所遇问题
    关于爬取网站的信息遇到的有关问题
    Hadoop综合大作业
    hive基本操作与应用
    熟悉HBase基本操作
    爬虫大作业
    第三章 熟悉常用的HDFS操作
    数据结构化与保存
    使用正则表达式,取得点击次数,函数抽离
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/3006447.html
Copyright © 2011-2022 走看看