Regarding your second example: I don’t know what Julia’s official definitions are here, but I should point out, that there are also sized arrays, like StaticArrays for instance.
Consider this example:
julia> test!(x::AbstractVector) = push!(x,0)
test! (generic function with 1 method)
julia> using StaticArrays; test!(SVector(3,2,1))
ERROR: MethodError: no method matching resize!(::SVector{3, Int64}, ::Int64)
In general I guess this is one of the downsides of multiple dispatch, if you make the definition for an abstract type too loose, you end up with such kind of errors, on the other hand if you make the definitions too rigorous then you lose a lot of flexibility…