bacor

个人站

Coding is important, so is writing


复用类

​ 利用旧代码实现功能的拓展,如果只是复制黏贴就显得笨拙,更优雅的方式是组合继承。 组合,顾名思义,即是在新的类中产生现有类的对象,也就是新的类由现有类组成,显得非常直观。 而继承则是按照现有类来创建新类,采用现有类的形式并在其中添加新代码。

组合语法

这种方法很常见也很直观,只需把对象引用放进新类中即可。例如

public class A{
	private String str1,str2;
	private B b = new B();
	private int i;
}

这里要注意,初始化时基本类型可以被初始化为零,但是对象引用会被初始化为null,想要初始化引用,一般有下列几种方法:

  • 在定义的地方初始化
  • 在构造器中初始化
  • 在使用之前,即惰性初始化
  • 实例初始化 下面是几种方法的示例:
    public class A{
      private A a;
      private B b;
      private C c;
      {
          a = new A();	//实例初始化
      }
    	
      public A(){
          b = new B();	//在构造器
      }
    	
      public String fun(){
          String str = "abc";	//在定义的地方
      }
      public static void main(String[] args){
          c = new C();
          System.out.println(c);	//惰性初始化
      }
    }
    

继承语法

使用继承时,需要使用关键字 extends + 原有类名 声明新类和原有类的关系。继承时,子类会自动获得基类中所有域和方法。 另外,如果子类想调用基类方法,一般会使用super关键字,super.fun()表示调用基类的fun()方法。 初始化基类:当初始化一个子类时,java会在子类的构造器中插入对基类构造器的调用,如果没有编译器会自动合成一个默认的构造器。当有多层继承关系时,会往上追溯到第一层然后向下依次初始化。

代理

代理是一种位于继承和组合之间的关系,**它将一个成员对象置于要构造的类中(类似组合),但同时在新类中暴露该成员对象的所有方法(类似继承)。它和设计模式中的代理模式关系密切。

选择

组合通常适用于在新类中使用现有类的功能而非它的接口的情形,是一种“has-a”的关系; 继承是使用某个现有类,并开发出一个它的特殊版本,是“is-a”的关系。

final关键字

数据

对于基本类型的数据,它无法改变;对于对象的引用也不能改变,但是所指的对象能够改变(数组同理)。 另外必须在域定义处或构造器中对final数据赋值。

方法

用final修饰方法有两个好处,第一是能够锁定方法,防止继承类修改,第二是能提高运行效率,但这个在高版本JDK中已经进行了优化,应尽量避免这样使用。

防止继承。