Java OOP 随心笔记

 
我认为一个软件开发初学者在 Java 编程语言中最难以学习的就是面向对象的概念,尤其以面向父类,面向接口编程尤为困难。作为学术研究人员,我翻阅了很多 Java 书籍,试图来找寻解决上述问题的方法。但是目前市场上的书籍对于刚才这些问题的阐述都比较肤浅,很难讲述给学员,因此我自己对面向父类,面向接口编程的概念作出了总结,并在多个班级中进行了实践,结果还是相当不错的,作为学习,我将自己总结的原则写于博客中,希望给更多的软件学习者提供帮助。
在面向对象的学习过程中,我为学员提出的总结性原则是:“左声明右实现”,那么如何来理解这句话呢?我们来看一个我上课一直沿用的案例:

package cn.softworks.oojava.demo;
 
/*** 坦克类,它是所有坦克的父类*/
class Tank {
   
    publicvoid printTank()
    {
        System. out .println( "This is Tank" );
    }
}
/*** M1 坦克类,它继承了坦克父类*/
class M1Tank extends Tank
{  
    // 该方法重写了父类中的printTank
    publicvoid printTank()
    {
        System. out .println( "This is M1Tank" );
    }
    //M1Tank 自己的方法
    publicvoid showName()
    {
        System. out .println( "M1Tank" );
    }
}
/*** 虎式坦克类,它继承了坦克父类*/
class TigerTank extends Tank
{  
    // 该方法重写了父类中的printTank
    publicvoid printTank()
    {
        System. out .println( "This is TigerTank" );
    }
}
/*** 坦克类的测试类 */
publicclass ClassMain {
   
    publicstaticvoid main(String args[]) {
       
        Tank tank = new TigerTank();
        // 最终的输出结果为:This is TigerTank
        tank.printTank();
    }
}

以上代码的最终运行结果是: This is TigerTank
我们再来看看“左声明右实现”这句话,作为以下语句而言:

Tank  tank = new TigerTank();

等号的左侧是 Tank tank ,而等号的右侧是 new TigerTank(),
根据“左声明右实现”的原则可以肯定左侧的 Tank tank 代码只是用来告诉编译器,在 Tank 类中拥有 printTank 方法,它只是对 printTank 方法进行了一次声明并没有真正实现 ( 开辟空间 ) ,而真正的实现是在右侧的, new TigerTank() 明确告诉了编译器,左侧的 printTank 方法由 TigerTank 来实现,因此最终使用的是 TigerTank 类中的 printTank 方法而并非是 Tank 类中的 printTank 方法,打印结果也就理所当然的为 This is TigerTank 了。
如果我们将代码写成以下形式:

Tank  tank = new M1Tank();

最终的运行结果为: This is M1Tank
根据“左声明右实现”的原则可以理解为 Tank tank 中所声明的 printTank 方法应该有 M1Tank() 来实现,因此最终使用的是 M1Tank 中的 printTank 方法。
请同学们注意:以上这个原则可以在任何地方使用,包括在接口和抽象类中,软件初学者可以以这个原则来理解面向父类的编程方法。
请同学用“左声明右实现”原则来考虑以下代码的运行结果:

Tank  tank = new M1Tank();
tank.showName();

答案为:编译出错,错误提示:没有 showName 这个方法, 请同学们 考虑一下这是为什么呢 :-) ?
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值