julia> using Parameters
julia> struct Cat
breed
colour
age
weight
name
end
julia> @with_kw struct Pet
name
kind
age
end
Pet
julia> Pet(c::Cat) = Pet(name=c.name, kind=typeof(c), age=c.age)
Pet
julia> c = Cat("None", "Black", 5, 5.0, "John")
Cat("None", "Black", 5, 5.0, "John")
julia> Pet(c)
Pet
name: String "John"
kind: Cat <: Any
age: Int64 5
You only need inner constructors if you want a Pet(a,b,c) constructor, which may be ambiguous with the default constructor.