Android知识Android开发经验谈Java学习笔记

Java三大特性之继承

2017-06-19  本文已影响94人  一只好奇的茂
public class Animal {
         public void eat(){
                   System.out.println("animal eatting...");
         }
}
class Bird extends Animal{
         public void eat(){
                   System.out.println("bird eatting...");
         }
         public void fly(){
                   System.out.println("bird flying...");
         }
}
class Main{      
         public static void main(String[] args) {
                   Animal b=new Bird(); //向上转型
                   b.eat();
                   b.fly();  //此处提示在Animal中没有定义fly方法。
        }
}
  1. 如果父类引用的对象如果引用的是指向的子类对象,那么在向下转型的过程中是安全的。也就是编译是不会出错误的。
  2. 如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误。
public class Girl {
    public void smile() {
        System.out.println("girl smile()...");
    }
}
class MMGirl extends Girl {
    @Override
    public void smile() {
        System.out.println("MMirl smile sounds sweet...");
    }

    public void c() {
        System.out.println("MMirl c()...");
    }
}
class Main {
    public static void main(String[] args) {
        Girl g1 = new MMGirl(); //向上转型
        g1.smile();
        MMGirl mmg = (MMGirl) g1;    //向下转型,编译和运行皆不会出错
        mmg.smile();
        mmg.c();
        Girl g2 = new Girl();
        /***************************不安全的向下转型,编译无错但会运行会出错******************************************/
        MMGirl mmg1 = (MMGirl) g2;
        mmg1.smile();
        mmg1.c();
        /***************************编译、运行均正常******************************************/
        if (g2 instanceof MMGirl) {
            MMGirl mmg2 = (MMGirl) g2;
            mmg2.smile();
            mmg2.c();
        }
    }
}

推荐阅读

Java三大特性之多态
Java三大特性之继承
Java三大特性之封装

上一篇 下一篇

猜你喜欢

热点阅读