java上转型和下转型(对象的多态性)

/*上转型和下转型(对象的多态性)
*上转型:是子类对象由父类引用,格式:parent p=new son
*也就是说,想要上转型的前提必须是有继承关系的两个类。
*在调用方法的时候,上转型对象只能调用父类中有的方法,如果调用子类的方法则会报错
*下转型:是父类向下强制转换到子类对象
*前提是该父类对象必须是经过上转型的对象。
*
*代码示例:*/

 abstract class Parent{
abstract void grow();
}
class Son extends Parent{
void grow(){
System.out.println("我比父亲成长条件好");
}
void dance(){
System.out.println("我会踢球");
}
}
public class test {
public static void main(String[] args) {
//上转型,用父类的引用子类的对象
Parent p=new Son();
//调用父类中有的方法
p.grow();
//p.dance();这里会报错,因为父类中没有dance()方法 //对进行过上转型的对象,进行强制下转型
Son s=(Son)p;
//调用子类中的方法
s.dance();
}
}

/*
* 在我们写程序中,很少会把代码写死,比如说还会有daughter类
* 然后在封装函数来调用对象,说不定会用到子类的方法,这里我们来讲解一下这一方面的知识*/

 abstract class Parent{
abstract void grow();
}
class Son extends Parent{
void grow(){
System.out.println("我比父亲成长条件好一点:son");
}
void play(){
System.out.println("我会踢球");
}
}
class Daughter extends Parent{
void grow(){
System.out.println("我比父亲成长条件好很多:daughter");
}
void dance(){
System.out.println("我会跳舞");
}
}
public class test {
public static void main(String[] args) {
Parent p=new Son();
show(p);
Parent p2=new Daughter();
show(p2);
}
public static void show(Parent p){
//现将父类中有的方法输出
p.grow();
//对进行过上转型的对象进行类型判断,然后进行相应的强制下转型
if(p instanceof Son){
//判断是哪个类的上转型对象,然后进行下转型
Son s=(Son)p;
//调用子类中的方法
s.play();
}else if(p instanceof Daughter){
Daughter d=(Daughter)p;
d.dance();
} }
}

/*
* 在上转型中,编译程序的时候,看父类中有没有对象调用的方法,没有的话,就报错
* 例如:Parent p=new Son();
* p.play();
* play()方法在父类中没有,所以会报错
* 在运行的时候,看子类中是否有调用的方法,有的话,运行子类的方法(重写父类的方法)
*
* */

上一篇:arm-linux-gcc安装使用教程


下一篇:使用Apache Mesos和Consul实现服务的注册发现