现在假如我有一个java类User
里面有一个
public void setName(){
}
方法
以及User类的两个构造方法
public User(){
}
public User(String name){
}
我现在想要其他人在new一个User对象user的时候,如果
user=new User();使用的是无参构造函数建立实体时,必须覆盖setName方法
而如果
user=new User("张三");使用的是有参构造函数建立实体时,就不用覆盖setName方法。
我该怎么做才能控制别人按照我的意思这么去new一个User对象
new一个java对象
------解决方案--------------------
增加一个flag,表示调用哪个构造函数,在构造函数中给flag赋值。在set方法中根据flag的不同,决定是否抛出异常。
java不是动态语言,想完全不让外面看见内部的方法,估计比较难。
------解决方案--------------------
lz就不该提供无参构造方法啊,只提供一个有参构造,他就只能使用有参的形式,你的第一种写法除非是抽象类。
------解决方案--------------------
abstract class User {
public abstract void setName();
}
class NamedUser extends User {
public NamedUser(String userName) {
}
@Override
public void setName() {
}
}
class User {
public User(String userName) {
}
}
第一种如果直接new user对象的话必须实现set方法,如果new nameduser就必须提供用户名
第二种必须提供用户名,没有无参构造方法