class classtest
{
public static void main(String[] args)
{
//boolean b = true;
boolean b = false;
class1 c;
if(b){
c = new class1();
}
else{
c = (class2)new class2();
}
if(c instanceof class1){
System.out.println("class1");
System.out.println(c.getClass().getName());
}
else if(c instanceof class2){
System.out.println("class2");
System.out.println(c.getClass().getName());
}
else
System.out.println("neither of them");
}
}class class1
{
public class1(){
System.out.println("I am class1");
}
};class class2 extends class1
{
public class2(){
System.out.println("I am class2");
}
};---------- output ----------
I am class1
I am class2
class1
class2为什么instanceof 的结果和class.getName()不一样?
{
public static void main(String[] args)
{
//boolean b = true;
boolean b = false;
class1 c;
if(b){
c = new class1();
}
else{
c = (class2)new class2();
}
if(c instanceof class1){
System.out.println("class1");
System.out.println(c.getClass().getName());
}
else if(c instanceof class2){
System.out.println("class2");
System.out.println(c.getClass().getName());
}
else
System.out.println("neither of them");
}
}class class1
{
public class1(){
System.out.println("I am class1");
}
};class class2 extends class1
{
public class2(){
System.out.println("I am class2");
}
};---------- output ----------
I am class1
I am class2
class1
class2为什么instanceof 的结果和class.getName()不一样?
instanceof是指是否属于某一个类而class.getName() 是要得到对象所属的类名
所以:
c instanceof class1和c instanceof class2的值都是true。
即子类的实例一定是其父类的一个实例!!!
2.c = (class2)new class2();不管c的声明如何,但它是一个子类的实例化。
而这句话确实是创建了一个子类。在创建的过程中它会调用父类的构造方法。所以有
“I am class1”这一句打印出。但实例的类名肯定是子类的名字喽。
1. method(class1)
2. method(class2)dan当c= new class2()
method(c);实际调用的是2了?