向上转型
子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。
此处父类对象可以是接口。
向上转型就是讲具体类转换为抽象类。
语法:父类 对象 = new 子类(); 例如:Animal hern = new Dog();
注意: 1、向上转型时,子类单独定义的方法会丢失。
2、子类引用不能指向父类对象。
package A; class Animal{ //父类 public void Eat() { //成员方法 System.out.println("所有动物的父类,eat"); } } class Dog extends Animal{//子类继承父类 public void Eat() {//重写父类Eat方法 System.out.println("子类Dog重写父类Eat方法,eat"); } public void Fly() {//新增子类方法 System.out.println("Dog类新增的方法,Fly"); } } public class Hern { public static void Sleep(Human N) { N.sleep(); } public static void main(String[] args) { // TODO Auto-generated method stub Hern hern = new Hern(); Animal hern1 = new Dog(); //向上转型 hern1.Eat(); //调用子类的方法 //hern1.Fly; //语法错误,向上转型时,子类单独定义的方法会丢失。 Human hern2 = new Male(); //直接调用进行向上转型 hern2.sleep(); hern.Sleep(new Male()); //向上转型,相当于:HUman hern1 = new Male(); hern.Sleep(new Famale()); /*运行结果是: 子类Dog重写父类Eat方法,eat 男人类 sleep 男人类 sleep 女人类 sleep */ } }
向下转型
向下转型是把父类对象转为子类对象。
向下转型就是讲抽象类转换为具体类。
语法:子类 对象 = (子类)父类对象; 例如:Dog hern2 = (Dog)hern; //向下转型
将父类对象强制转换为某个子类对象,这种方式称为显示类型转换。
注意: 1、向下转型的前提是父类对象指向的是子类对象(也就是说,在向下转型之前,它得先向上转型)
2、向下转型只能转型为本类对象(猫是不能变成狗的)。
3、子类对象是父类的一个实例,但是父类对象不一定是子类的实例。
4、如果将父类对象直接赋予子类,会发生编译器错误,因为父类对象不一定是子类的实例。
package A; class Animal{ //父类 public void Eat() { //成员方法 System.out.println("所有动物的父类,eat"); } } class Dog extends Animal{//子类继承父类 public void Eat() {//重写父类Eat方法 System.out.println("子类Dog重写父类Eat方法,eat"); } public void Fly() {//新增子类方法 System.out.println("Dog类新增的方法,Fly"); } } public class Hern { public static void Sleep(Human N) { N.sleep(); } public static void main(String[] args) { // TODO Auto-generated method stub Animal hern = new Dog(); //向上转型 hern.Eat(); //调用子类方法 Dog hern2 = (Dog)hern; //向下转型 hern2.Eat(); hern2.Fly(); /*运行结果是: 子类Dog重写父类Eat方法,eat 子类Dog重写父类Eat方法,eat Dog类新增的方法,Fly */ } }