java中父类引用指向子类对象 能够提高最大的灵活性 的实质? 请帮忙解惑,谢谢!
4个回答
展开全部
//父类
public class Animal {
public void method(){
System.out.println("我是一个动物");
}
}
子类1:
public class Dog extends Animal {
public void method(){
System.out.println("我是一条小狗狗");
}
}
子类2:
public class Cat extends Animal {
public void method(){
System.out.println("我是一个咖啡猫");
}
}
测试类:
public class TestAnimal {
public static void main(String[] args) {
//这里就是父类引用指向子类对象,假如我不想要Dog了, 改成Cat也可以,其它都不需要变化
//这里就是亮点,是多态的表现形式
Animal a1 = new Dog();
a1.method();
Animal a2 = new Cat();
a2.method();
}
}
注意,父类和子类中的method方法名必须一样,方法体可以不一样
public class Animal {
public void method(){
System.out.println("我是一个动物");
}
}
子类1:
public class Dog extends Animal {
public void method(){
System.out.println("我是一条小狗狗");
}
}
子类2:
public class Cat extends Animal {
public void method(){
System.out.println("我是一个咖啡猫");
}
}
测试类:
public class TestAnimal {
public static void main(String[] args) {
//这里就是父类引用指向子类对象,假如我不想要Dog了, 改成Cat也可以,其它都不需要变化
//这里就是亮点,是多态的表现形式
Animal a1 = new Dog();
a1.method();
Animal a2 = new Cat();
a2.method();
}
}
注意,父类和子类中的method方法名必须一样,方法体可以不一样
更多追问追答
追问
可是假如我 子类里面 有一些 父类没有的东西 那 岂不是 没用啊? 谢谢啊
追答
呵呵,那就是扩展了,而且我调用的也是子类的方法,不是父类的方法,你运行一下就知道了。而且你可以创建无限类去实现Animal,不过要重写method方法。看来你对面向对象的三大特性很不了解呀,一般我们的多态都是使用一个接口代替Animal
展开全部
有个动物类,它有个叫的抽象方法,下面有很多子类,比如猴子 狗 等等 (子类必须实现这个方法)
现在有个人他有个成员变量是狗,他有个方法 让他的宠物叫
f(Dog d){d.jjiao();}
然后有一天他的宠物变成猴子了 ,这个方法就不能用了 你需要修改成猴子,于是麻烦就产生了
但是用了多态,就好了 你可以这样:这个人的宠物定义为抽象的动物
f(Animal a) {a.jiao();}
好吧,随便他的宠物怎么变 ,只要继承了动物这个类,就实现了叫的方法,就不需要再修改人的这个方法了,实际调用的就是子类的叫的方法,这样少了很多麻烦了不是,是不是有点灵活了 有木有!?》
当然这只是多态中小小的一个例子
现在有个人他有个成员变量是狗,他有个方法 让他的宠物叫
f(Dog d){d.jjiao();}
然后有一天他的宠物变成猴子了 ,这个方法就不能用了 你需要修改成猴子,于是麻烦就产生了
但是用了多态,就好了 你可以这样:这个人的宠物定义为抽象的动物
f(Animal a) {a.jiao();}
好吧,随便他的宠物怎么变 ,只要继承了动物这个类,就实现了叫的方法,就不需要再修改人的这个方法了,实际调用的就是子类的叫的方法,这样少了很多麻烦了不是,是不是有点灵活了 有木有!?》
当然这只是多态中小小的一个例子
追问
假如用父类引用 就无法 指向 子类特殊的属性 或是 方法了啊? 那么还有什么用了? 谢谢啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个人说的是对的,java中父类不能调用子类,只有子类可以调用父类里面的变量和方法
追问
对啊 既然不能 调用子类 那还用他干啥了? 新手 还有点疑惑 谢谢啊
追答
比如Person类是父类,Child类是子类,如果定义了
Person person=new Person();
Child child=new Child();
要让person指向子类Child,可以使用强制装换,如下
person=(Person)child
而子类指向父类则可以不用装换
child=(Child)person是不可以的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询