JAVA菜鸟入门篇 - 继承VS组合、final关键字 (十六)

来源:互联网 发布:闹钟提醒软件 编辑:程序博客网 时间:2024/05/30 22:51

一、继承VS组合


    继承我们十四章节说过啦,大家可以看看,现在我们来看看组合

    组合:将(继承中)父类当做一个属性变量放在子类(相对于继承而言,没有实现extends)中。


“is-a”关系使用继承!(是关系)

      - 上面的通过在Audi类中增加一个Car属性虽然也复用了代码,但是不合逻辑不容易理解

      - 比如说:哺乳动物是动物,但是绝对不能说哺乳动物包含动物


“has-a”关系使用组合!(包含关系)

      - 计算机类 ,主板类。可以通过在计算机类中增加主板属性来复用主板类的代码!

      - 计算机包含主板,同样不能说计算机是主板。

<span style="font-size:18px;">/** * 测试组合 * @author dell * */public class Animal2 {String eye;public void run(){System.out.println("跑跑!");}public void eat(){System.out.println("吃吃!");}public  Animal2(){super();System.out.println("创建一个动物!");}public static void main(String[] args) {Bird2 b = new Bird2();b.run();b.animal2.eat();  //利用实例化Bird2的对象b,调用b中的属性变量Animal2中的eat()方法}}class Bird2  {Animal2 animal2=new Animal2(); //原本Bird继承Animal2类,现在为了讲解组合的关系public void run(){  //run()与Animal2类中的run()方法不再是重写的关系animal2.run();System.out.println("我是一个小鸟!!");}/** * Bird2类默认继承Object类,super()方法调用的是Object类的无参构造器方法 */public Bird2(){super();System.out.println("建一个鸟对象");}}</span>
显示结果:

创建一个动物!
建一个鸟对象
跑跑!
我是一个小鸟!!
吃吃!


总结:
从建模的角度来看,继承与组合是不同的概念;

从代码复用的角度来看,它们之间是可以互相取代的!


二、final关键字


修饰变量:
     - 常量,初始化之后不能再被修改;


修饰方法:
   - 该方法不可被子类重写。但是可以被重载


修饰类
     - 修饰的类不能有子类,不能被继承。比如:Math、String


1.修饰变量:被final修饰的 变量就是常量,所以在写的时候一般采用大写

<span style="font-size:18px;">final int MAX_VALUE= 200;    //常量,初始化之后,<span style="font-family: Arial, Helvetica, sans-serif;">MAX_VALUE值就不能修改,否则会报错误:Syntax error on token "Invalid Character", ; expected</span></span>
2.修饰方法

<span style="font-size:18px;"><span style="white-space:pre"></span>public /*final*/ void run(){   //final加到方法前面,意味着该方法不能被子类重写!System.out.println("跑跑!");}public void run(String str){ //这里形参str没有具体应用到,仅仅实现以下重载 System.out.println("实现run()方法的重载!");}</span>

3.修饰类

<span style="font-size:18px;">public /*final*/ class Animal {    //final修饰类则说明,这个类不能被继承!public  void run(){  System.out.println("跑跑!");}}class Bird  extends Animal {public void run(){super.run();System.out.println("我是一个小小小小鸟,飞呀飞不高");}}</span>
如果final修饰类,修饰的类不能有子类,不能被继承。否则会报错误:Illegal modifier for the class Animal; only public, abstract & final are permitted

本文参考:非常感谢北京尚学堂高琪老师!

0 0