抽象类是不能实例化的,为什么还可以有构造函数,这是基于什么得考虑?请帮忙

bit001 2005-08-03 10:21:05
谢谢!!!
...全文
395 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
洪泉 2005-08-04
  • 打赏
  • 举报
回复
要多注意细节问题,有两个方法:一是从String类继承,重载方法equals;另外就是 a,b两个对象的类型声明!
OO00 2005-08-04
  • 打赏
  • 举报
回复
xue xi
Preamble 2005-08-04
  • 打赏
  • 举报
回复
我觉得主要是用于子类,
抽象类也可以定义变量
bit001 2005-08-04
  • 打赏
  • 举报
回复
我记得Object类的equals方法就是比较两个引用是否引向相同的地址
wf2525 2005-08-03
  • 打赏
  • 举报
回复
package testjboss;

/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/

public class StringTest {
public boolean equals(Object b) {
System.out.println("equals is called");
return this == b;
}

public static void main(String[] arg) {
StringTest a = new StringTest();
StringTest b = new StringTest();

if (a.equals(b)) {
System.out.println("true");
}
else {
System.out.println("false");
}
}
}


//===========================结果
equals is called

false


wf2525 2005-08-03
  • 打赏
  • 举报
回复
你可以看return new Base(i) 及其后面大括号中的内容

这即使匿名内部类的特点,可以看看Upcasting原理.
interhanchi 2005-08-03
  • 打赏
  • 举报
回复
虽然你覆盖了equals方法,可是你比较的是String对象,又不是StringTest 对象,肯定不会调用你覆盖的那个equals方法了!
interhanchi 2005-08-03
  • 打赏
  • 举报
回复
你的那个程序,有什么不对吗? 我觉得输出很正常呀!a.equals(b)你这里调用的依然是Object里的equals呀 !
wf2525 2005-08-03
  • 打赏
  • 举报
回复
输出是true呀 怎么了?


equals就是看他们是否相同了,他不是比较地址的。
interhanchi 2005-08-03
  • 打赏
  • 举报
回复
给你个例子!
abstract class Base{
public Base(int i){
System.out.println("Base constructor, i ="+i);
}
public abstract void f();
}
public class AnonymousConstructor{
public static Base getBase(int i){
return new Base(i){
{
System.out.println("Inside instance initializer");
}
public void f(){
System.out.println("In anonymous f()");
}
};
}
public static void main(String[] args){
Base base = getBase(47);
base.f();
}
}
bit001 2005-08-03
  • 打赏
  • 举报
回复
我使用匿名类的时候怎么了?请说的具体点把。
bit001 2005-08-03
  • 打赏
  • 举报
回复
顺便看看这个程序的输出结果:和我想的不一样啊!
public class StringTest {
public boolean equals(Object b)
{
System.out.println("equals is called");
return this==b;
}
public static void main(String[]arg)
{
String a=new String("Hello");
String b=new String("Hello");
if(a.equals(b))
System.out.println("true");
else
System.out.println("false");
}
}
interhanchi 2005-08-03
  • 打赏
  • 举报
回复
比如你使用匿名类的时候 !

62,614

社区成员

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

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