在new一个java对象时,如何控制程序员是否必须实现一个方法

a33244 2013-09-09 10:16:32
现在假如我有一个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对象
...全文
285 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
a33244 2013-09-09
  • 打赏
  • 举报
回复
你说得对,我想了一下我提出来的问题,还是得必须实现一个抽象方法的问题,问题还是没有解决,不过谢谢你们了。
小绵羊 2013-09-09
  • 打赏
  • 举报
回复


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就必须提供用户名 第二种必须提供用户名,没有无参构造方法
小绵羊 2013-09-09
  • 打赏
  • 举报
回复
lz就不该提供无参构造方法啊,只提供一个有参构造,他就只能使用有参的形式,你的第一种写法除非是抽象类。
a33244 2013-09-09
  • 打赏
  • 举报
回复
我的目的是想让其他程序员在使用new一个User对象的时候控制代码是否通过编译 如果 user=new User(); 这样的直接new一个java对象是无法通过编译的。 如果想要通过编译,必须按照下面的两种写法才能通过编译 1.要么覆盖setName方法 user=new User(){ public void setName(){ } }; 2.要么使用有参构造函数 user=new User("张三"); 而不是像你说的在程序执行的过程中抛一个异常,我的目的是想控制程序员去new一个对象
  • 打赏
  • 举报
回复
增加一个flag,表示调用哪个构造函数,在构造函数中给flag赋值。在set方法中根据flag的不同,决定是否抛出异常。 java不是动态语言,想完全不让外面看见内部的方法,估计比较难。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧