Java学习笔记(六)

Java学习笔记(六)

初始化块

用{代码块}对Java对象进行初始化,也可以被static修饰,此时称为静态代码块,只能访问静态方法和变量
程序的执行顺序如下:

  1. 声明成员变量的默认值及显示初始化
  2. 多个初始化块依次执行(静态只执行依次一次且优于非静态执行 ,非静态执行多次)
  3. 构造器对成员进行赋值

静态代码块常常用来对静态成员变量进行赋值,非静态代码块常常用在匿名内部类中,用代码块替代构造方法:

// 这是一个Person的匿名子类(可以看出子类独有的重写标志),此时要想改变父类的属性值(又不能重写构造方法,因为没有名字),可以通过代码段来代替构造方法(Java高级编程)
Person p=new Person(){
	{
		super.name="李四";
	}
	@Override
	public void test(){
		//TODO
	}
}

final

  1. 修饰类不可以继承
  2. 修饰方法不可以重写
  3. 修饰变量为常量(最好为大写)

抽象类 abstract

将父类设计的十分抽象,以至于其没有具体的实例

  1. 抽象方法,只有方法的声明,以分号结束:abstract int abstractMethod(int a); 含有抽象方法的类都必须被声明为抽象类
  2. 抽象类不能实例化

模板方法设计模式(TemplateMethod)

利用抽象类的设计模式,将确定的部分实现,将不确定的部分暴露给子类去实现

public abstract class Template{
	public abstract void code();
	public final void getTime(){
		long start=System.currentTimeMillis();
		code();
		long end=System.currentTimeMIllis();
		
		System.out.println("code方法执行时间:"+(end-start));
	}
}

接口(interface)

利用接口实现多重继承的效果,接口是一种特殊抽象类,这种抽象类中只包含常量和方法的定义而没有实现(相当于声明语句)。接口也可以直观理解为一类事物一系列动作的定义

  • 定义 interface
  • 所有成员都是public static final
  • 所有方法都是public abstract
  • 没有构造器
  • 接口可以采用多层继承机制
  • 接口和类也存在多态
    抽象类增加新的抽象方法存在的问题
    Java学习笔记(六)

如果抽象类增加抽象方法,则子类必须实现该抽闲方法,否则将改为抽象类
Java学习笔记(六)

引入接口后,可以在新建的接口中新增抽象方法而不必改变父类,在必要时实现接口。
用Java描述会唱歌的厨子是个老师/font>
Java学习笔记(六)

public abstract class Person{
	int age;
	String name;
	int sex;
}
public interface Cooking{
	void fry();
}
public interface Singing{
	void sing();
}
public SCTercher extends Person implements Cooking,Singing{
	string course;
	@Override
	public void fry(){
	}
	public void sing(){
	}
}

工厂方法(FactoryMethod)

将对象创建工作延迟到了子类
Java学习笔记(六)

在合作开发的场景中,开发人员A设计BWM类,而开发人员B需要使用BWM的对象,如果直接使用对应BWM类进行对象的创建,当BWM改名时,会导致对象的创建也需要改名:
此时通过定义interface BWM和interface BWMFactory,并利用多态性质即可解决这个问题。

内部类

与外部类对应的是内部的类,外部类得new内部类对象才能访问内部类,内部类访问外部类对象可以通过类名.this.xx来访问
内部类可以变相解决多重继承问题

class A{
	private class InnerB extends B{
		@Overwrite 
		public void testB(){
		}
	}
	private class InnerC extends C{
		@Overwrite
		public void testC(){
		}
	}
}
class B{
	public void testB(){};
}
class C{
	public void testC(){};
}

总结

Java学习笔记(六)

上一篇:30_Go基础(接口)


下一篇:shell基础知识查缺补漏