liujijiang

java学习笔记 --7-- 复用类

2020.03.27

复用类

  • 组合(new一个现有类的对象)
  • 继承(不改变形式,只是添加代码)

java使用super关键字表示超类,当前类就是重超类继承来的

名称屏蔽

java基类中的方法有多个重载,导出类中重新定义该方法名称不会屏蔽基类中方法的任何版本

@override:如果你重载而不是重写基类中的方法时,报错

组合和继承之间的选择

组合:has-a
继承:is-a

选择:判断自己是否要用到新类向基类的转型,如果需要,继承是必须的,如果不需要,考虑使用组合吧

向上转型

package com.company;


public class Main {

    public static void main(String[] args) {
	// write your code here
        Test2.play(new Test2());
        
    }
}

class Test1{
    int i;
    static void play(Test1 test1){
        System.out.println(test1);
    }
}

class Test2 extends Test1{
    
}


向上转型:test2转为test1,子类引用转为父类引用
这种转换是安全的,因为父类中有的东西子类中都有,完全可以转换

final关键字

final数据

  • 编译时的常量
  • 固定引用的指向

final + static :一个固定不变的域,占据一段不能改变的空间

编译时常量:基本类型,可以不在定义的时候赋初值,但是使用前一定要赋初值

class Test2 extends Test1{

    private final int a;
    
    public Test2(){
        a=1;
    }
}

固定引用:如果给一个对象的引用使用final,表示这个引用永远指向这个对象,但是这个对象自己内部是可以变化的,

public static final int VALUE_TEST = 1;

  • public:可以用于包外
  • static:只有一份
  • final:是常量

static final 使用全大写下划线命名,而且必须赋初值

final参数

class Test2 extends Test1{

    private final int a;

    public Test2(){
        a=1;
    }
    
    public Test2(final int a){
        this.a = 1;
        
        a=1;
    }
}

a=1 报错,final参数表示引用的指向固定,不能改变

final方法

方法锁定,无法修改含义,无法覆盖

private的方法隐含final属性

final类

表示这个类不能被继承
同时类中的所有方法都隐含着final

总结

设计程序时优先使用组合(或者代理)