If the method is inherited in a Persistent class, it won't compile.  

You can easily modify the method to ignore abstract method if they are system (start with %) or originate from system classes (start with %).

It looks as though it checks for the name of the abstract method but not the number of parameters the method requires.

You can modify checker to check whatever you need.

Also, if I add another parameter in addition to the parameters listed, this also seems to be ok.  

It is, inherited method can accept more arguments than a parent method.

Do you know if there are plans for the compiler to check for the implementation of abstract methods instead of having to inherit code to do this?

Please file a WRC issue.

You can easily add your own compile-time check via method generators. Here's an example which checks that all abastract methods are implemented.

Class Test.AbstractChecker
{

ClassMethod Check() As %Status [ CodeMode = objectgenerator, ForceGenerate ]
{
    #Dim sc As %Status = $$$OK
    
    // Get class name from %compiledclass object which is an instance of a currently compiled class
    Set class = %compiledclass.Name

    // Iterate over class methods.
    // You can also use %class object to iterate
    Set method=$$$comMemberNext(class, $$$cCLASSmethod, "")
    While method'="" {
        
        // Get mthod abstract state
        Set abstract = $$$comMemberKeyGet(class, $$$cCLASSmethod, method, $$$cMETHabstract)
        
        // Quit iteration when we find any abstract compiled method
        If abstract {
            set origin = $$$comMemberKeyGet(class, $$$cCLASSmethod, method, $$$cMETHorigin)
            Set sc = $$$ERROR($$$GeneralError, $$$FormatText("Abstract method %1 in class %2 not implemented (origins from %3)", method, class, origin))
            Quit
        }
        
        // Get next method
        Set method=$$$comMemberNext(class, $$$cCLASSmethod, method)        
    }
    Quit sc
}

}

After adding this class to inheritance I get an error on compilation:

How do I reference parent from child if parent id is composite?

Here's my global:

^data("idA", "idB") = "Parent"
^data("idA", "idB", 1) = "Child"

And Class is:

Class Parent {
Property IdAProp;
Property IdBProp;
}

SQL Storage for Parent works.

For Child I have tried:

<Subscript name="1">
<Expression>{User.Parent.IdAProp}</Expression>
</Subscript>
<Subscript name="2">
<Expression>{User.Parent.IdBProp}</Expression>
</Subscript>
<Subscript name="3">
<Expression>{Position}</Expression>
</Subscript>

But compilation fails with:

ERROR #5547: Map: Map1 - Subscript Expression - invalid expression '{User.Parent.IdAProp}'.  Must be a valid field reference.    If this is the Master Map, it must be an IDKEY field.
  > ERROR #5030: An error occurred while compiling class 'User.Children'

UPD. SQL schema name should be used, not class.

You can create your own snippets in VSCode.

For example here's snippet code for BS

Class ${1:class} Extends Ens.BusinessService
{

Parameter ADAPTER = "${2:adaptor}";

Property Adapter As ${2:adaptor};


Method OnProcessInput(pInput As %RegisteredObject, Output pOutput As %RegisteredObject, ByRef pHint As %String) As %Status
{
    Quit $$$ERROR($$$NotImplemented)
}
}