• 《思考致富》_03_欲望不等于贪婪:如何将欲望转化为财富
  • 《思考致富》_02_成功的多重面纱:美国成功学的三个流派
  • 《思考致富》_01_关于本书
  • 《有钱人和你想的不一样》_17_学习成功者:如何通过社交成为更好的自己
  • 《有钱人和你想的不一样》_16_超越嫉妒:从成功人士身上学到的功课
  • 《有钱人和你想的不一样》_15_自我营销的艺术:富人如何推广自己
  • 《有钱人和你想的不一样》_14_迎难而上:如何变得在困难面前更强势
  • 《有钱人和你想的不一样》_13_把握机遇:为何要把视线从困难转向机会
  • 《有钱人和你想的不一样》_12_富人与穷人:理财习惯的天与地
  • 《有钱人和你想的不一样》_11_晋升为资产阶级:被动收入的四大法则
  • 对象的类型转换 - 编程那点事

    编程那点事编程那点事

    专注编程入门及提高
    探究程序员职业规划之道!

    对象的类型转换

    在多态的学习中,涉及到将子类对象当作父类类型使用的情况,例如下面两行代码:

    Animal an1=new Cat(); //将Cat 对象当作Animal 类型来使用
    Animal an2=new Dog(); //将Dog 对象当作Animal 类型来使用

    将子类对象当作父类使用时不需要任何显式地声明,需要注意的是,此时不能通过父类变量去调用子类中的某些方法,接下来通过一个案例来演示。

    //定义Animal 接口
    interface Animal {
        void shout(); // 定义抽象方法shout()
    }
    // 定义Cat 类实现Animal 接口
    class Cat implements Animal {
        // 实现抽象方法shout()
        public void shout() {
            System.out.println("喵喵……");
        }
        // 定义sleep()方法
        void sleep() {
            System.out.println("猫睡觉……");
        }
    }
    // 定义测试类
    public class Example {
        public static void main(String[] args) {
            Cat cat = new Cat(); // 创建Cat 类的实例对象
            animalShout(cat); // 调用animalShout()方法,将cat 作为参数传入
        }
        // 定义静态方法animalShout(),接收一个Animal 类型的参数
        public static void animalShout(Animal animal) {
            animal.shout(); // 调用传入参数animal 的shout()方法
            animal.sleep(); // 调用传入参数animal 的sleep()方法
        }
    }

    编译程序报错

    在main方法中,调用animalShout()方法时传入了Cat类型的对象,而方法的参数类型为Animal类型,这便将Cat对象当作父类Animal类型使用。当编译器检查到第29行代码时,发现Animal类中没有定义sleep()方法,从而出现编译程序报错的错误信息,报告找不到sleep()方法。由于传入的对象是Cat类型,在Cat类中定义了sleep()方法,通过Cat类型的对象调用sleep()方法是可行的,因此可以在animalShout()方法中将Animal类型的变量强转为Cat类型。将animalShout()方法进行修改,具体代码如下:

    public static void animalShout(Animal animal) {
        Cat cat = (Cat) animal; //将animal 对象强制转换为Cat 类型
        cat.shout(); //调用cat 的shout()方法
        cat.sleep(); //调用cat 的sleep()方法
    }

    修改后再次编译,程序没有报错,运行结果:

    喵喵……
    猫睡觉……


    未经允许不得转载: 技术文章 » Java编程 » 对象的类型转换