比如过来一个人,你要判断他是教师还是工人,当然是先假定他是教师或者工人,然后用教师或者工人的标准去判断了。
而教师或者工人的标准,当然是在教师或者工人这个类中,而不该在人这个类中啊,要知道人的分法有很多种,不可能都在人这个父类中预先做好判断的啊!
java的这一改变,完全就破坏了面向对象的自然规则,弱化了语言的功能。
恼火死,想给有很多成员的javabean做个适配器,来适用特殊应用场合,结果遇上java的这一特性。难道得自己在适配器里把那么多成员方法一一实现么?!
而教师或者工人的标准,当然是在教师或者工人这个类中,而不该在人这个类中啊,要知道人的分法有很多种,不可能都在人这个父类中预先做好判断的啊!
java的这一改变,完全就破坏了面向对象的自然规则,弱化了语言的功能。
恼火死,想给有很多成员的javabean做个适配器,来适用特殊应用场合,结果遇上java的这一特性。难道得自己在适配器里把那么多成员方法一一实现么?!
不知道你所说的类是不是对象?
类和对象完全是两个概念。给你说个小例子吧。
Object o1 = new Object();
String o2;
在上面这种情况下,Object 是String的父类,按你说的,如果进行下列转换:
o2 = (String)o1;
这是错误的,因为o1本身是Object类的对象,没有String类的特性。我不知道这种
对象转换过去后会有什么用,只会出一个什么也不是的结果,而这些在C++中是可以的。第二个:
Object o1 = new String("abc");
String o2 = new String("124");
对于这种情况,大家知道,o1和o2从引用类型上看,是两种类型,而从本质上看,他们
都是String类型的对象,所以,如果进行如下转换:
o2 = (String)o1;
这在java中是完全充许的,而这样的转换在实际应用中也是经常用到的。java并没有限制什么。我承认,在有些语法上,功能上,java是比C++限制的更多了一些,但是这些限制本身都是有目的
的,比如说,为了提高程序的安全性,java中不可以对内存地址真接操作。而这些也恰恰是java的特性。
再一个,不要拿C++和java作比较,他们适用的地方是不一样的,各自有各自的领域,不能说谁好谁坏的。
难道C++允许向下转吗?不明白简单一个instanceof 就可以了
---------------------------------------------------
您可以先做个抽象类,然后在抽象类里面做个空的实现
这样就不必再实现每一个方法了
楼主先搞清楚JAVA的基本概念再说吧
要不然,自己发明一种语言,想怎么来就怎么来
否则,用别人的语言就要遵守别人的规范
Person oneperson;
oneperson=new PersonA();
if (oneperson instanceof Worker)
{
((Worker)oneperson).working();
}else
{
System.out.print("i am not a worker");
}
oneperson=new PersonC();
if (oneperson instanceof Worker)
{
((Worker)oneperson).working();
}else if (oneperson instanceof Teacher)
{
System.out.print("i am not a teacher");
}
}
}
class Person{
public void eat()
{
System.out.print("i can eat");
}
}
interface Worker{
public void working();
}
interface Teacher{
public void teaching();
}
class PersonA
extends Person
implements Worker{ public void working() {
System.out.print("i am a worker do my working");
}
}class PersonB extends Person implements Teacher { public void teaching() {
System.out.print("i am a teacher do my teaching");
}}class PersonC extends Person implements Teacher,Worker{ public void teaching() {
System.out.print("i am a teacher do my teaching");
} public void working() {
System.out.print("i am a worker do my working");
}
}
你可以把这个对象用instanceof分被跟工人和老师比较,哪一个类别的比较中得到true,就是说明这个人是这个类别的!
如一楼所说:
---------------------------------------
Object o1 = new String("abc");
String o2 = new String("124");
对于这种情况,大家知道,o1和o2从引用类型上看,是两种类型,而从本质上看,他们
都是String类型的对象,所以,如果进行如下转换:
o2 = (String)o1;
这在java中是完全充许的,而这样的转换在实际应用中也是经常用到的。java并没有限制什么。
------------------------------------------
java的这种做法是很有作用的!