首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

各位大哥,小女有一关于父类的引用指向子类的对象的有关问题想

2011-12-07 
各位大哥,小女有一关于父类的引用指向子类的对象的问题想请教大家这个程序不知道哪里错了,可能是publicvoi

各位大哥,小女有一关于父类的引用指向子类的对象的问题想请教大家
这个程序不知道哪里错了,可能是   public   void   f(Animal   a)   错了

class   Animal{
private   String   name;
public   Animal(String   name){
this.name   =   name;
}
public   String   getName()   {
return   name;
}
public   void   setName(String   name)   {
this.name   =   name;
}
}

class   Dog   extends   Animal{
private   String   furColor;
public   Dog(String   n,   String   c){
super(n);
furColor   =   c;
}

public   String   getFurcolor()   {
return   furColor;
}
public   void   setFurcolor(String   furcolor)   {
this.furColor   =   furcolor;
}
}

class   Cat   extends   Animal{
        private   String   eyescolor;
        public   Cat(String   n,String   e)   {
super(n);
eyescolor   =   e;
}
public   String   getEyescolor()   {
return   eyescolor;
}
public   void   setEyescolor(String   eyescolor)   {
this.eyescolor   =   eyescolor;
}


}

public   class   Test   {

public   static   void   main(String[]   args)   {
Test   test   =   new   Test();
Animal   a   =   new   Animal( "name ");
Cat   c   =   new   Cat( "catname ", "blue ");
Dog   d   =   new   Dog( "dogname ", "black ");
test.f(a);  
test.f(c);
test.f(d);

          public   void   f(Animal   a){                           //这里可能错了,但不知道怎么错了
                  System.out.println( "name: "+a.getName());
                  if(a   instanceof   Cat){
                  Cat   cat   =   (Cat)a;    
                  System.out.println( "   "+cat.getEyescolor()+ "eyes ");
                  }
                  else   if(a   instanceof   Dog){
                  Dog   dog   =   (Dog)a;  
                  System.out.println( "   "+dog.getFurcolor()+ "   fur ");
                  }
                 
                }

还有什么叫父类的引用指向子类的对象   ,体现在这个程序中有什么呢好处   ?拜托各位大哥

[解决办法]
public class Test {

public static void main(String[] args) {
Test test = new Test();
Animal a = new Animal( "name ");
Cat c = new Cat( "catname ", "blue ");
Dog d = new Dog( "dogname ", "black ");


test.f(a);
test.f(c);
test.f(d);
}

public void f(Animal a){
System.out.println( "name: "+a.getName());
if(a instanceof Cat){
Cat cat = (Cat)a;
System.out.println( " "+cat.getEyescolor()+ "eyes ");
}
else if(a instanceof Dog){
Dog dog = (Dog)a;
System.out.println( " "+dog.getFurcolor()+ " fur ");
}
}
}

================================================================
我把你代码复制到IDE是有错误提示,但后面我忘记怎么改就好了。上面就是我改过的


[解决办法]
给你个例子自己运行看看 体会一下父类的引用指向子类的对象的好处
public class A
{
void get()
{
System.out.println( "A ");
}
}


public class B extends A
{
void get()
{
System.out.println( "B ");
}
}


public class C extends A
{
void get()
{
System.out.println( "C ");
}
}


public class Test
{
public static void main(String[] args)
{
A a = new A();
A b = new B();
A c = new C();
a.get();
b.get();
c.get();
}
}
==============================
A
B
C

[解决办法]
main函数少了个}
父类的引用指向子类的对象?应该是说 一个对象实例创建挽就定死了,比如dog,如果程序里的变量写dog的话,万一以后发生变化就要改代码了。那么事先就不写死dog,而是写父类Animal,大么以后用到Animal的地方,用dog实例,cat实例都可以取代,不用改代码了。


[解决办法]
你自己本来的代码不能很好体现 父类的引用指向子类的对象 的真正意义
[解决办法]
public void f(Animal a) 把这个放在main()外就好了
[解决办法]
去理解一下异类收集啊。
[解决办法]
父类的引用指向子类的对象,指的是定义一个父类型的变量,使它实际指向的是子类创建的对象,比如:Animal a = new Cat(); a是父类类型的引用,而它实际指向的是Cat对象,而Cat对象又是Animal的子类,所以说是父类的引用指向子类的对象这一说法! 你还可以按照类型转换的方向理解这个问题,
一、引用类型内部的自动转换
只有在赋值运算中才有可能发生,而且“右式”的类型必须是“左式”的类型的子类型。
二、引用类型间的强制转换
其强制转换语法与简单类型一致,只要源类型与目标类型具有形式上的“父子”关系,就可以使用强制转换这种语法特性。但是,如果源值或源表达式所引用的对象的实际构建类不是目标类型的“子类型”的情况下,在运行阶段则会发生异常。
理解了这个问题之后你就可以理解啥叫动态绑定的概念了。
[解决办法]
还有什么叫父类的引用指向子类的对象 ,体现在这个程序中有什么呢好处 ?拜托各位大哥


父类的引用指向子类的对象,体现在程序中的好处就是能够实现动态绑定, 也就是体现了,java的特性之一:多态性。

[解决办法]
看看有关于李氏代换的东西或许对对你能有些帮助
[解决办法]
父类引用指向子类对象的好处是实现多态

热点排行