读书人

各位大哥小女有一关于父类的引用指向

发布时间: 2011-12-07 22:35:48 作者: rapoo

各位大哥,小女有一关于父类的引用指向子类的对象的问题想请教大家
这个程序不知道哪里错了,可能是 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的特性之一:多态性。

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

读书人网 >J2SE开发

热点推荐