The second chunk of code you tried is almost right. The problem is private is operating in the context of instance methods instead of class methods.
To get private or private :new to work, you just need to force it to be in the context of class methods like this:
class A
class << self
private :new
end
end
Or, if you truly want to redefine new and call super
class A
class << self
private
def new(*args)
super(*args)
# additional code here
end
end
end
Class-level factory methods can access the private new just fine, but trying to instantiate directly using new will fail because new is private.
parseorimport(orcall). The instance is an implementation detail not relevant to the caller.irb, and then inputA.create, an instance is created:class A; private_class_method :new; def self.create; self.new; end; end.