一、数组
数组是相同类型数据的有序集合。数组描述的是若干个相同类型的数据,按照一定的先后次序排列组合而成。其中每一个数据被称作一个元素,每一个元素可通过索引来访问它们。
数组变量是引用类型,数组是一个对象,数组中的每个元素相当于该对象的成员变量
声明数组有两种方式
1、type[] arr_name;
2、type arr_name[];
数组的初始化方法有三种:默认初始化、动态初始化和静态初始化
静态初始化:如 int[] a={1,2,3};
默认初始化:如 int[] b=new int[3];//此时会默认给数组元素赋值,赋值规则和成员变量赋值规则一样(即数字为0,布尔为false,引用类型为null)
动态初始化:如 int[] c=new int[3];
c[0]=1;c[1]=2;c[2]=3;
for-each循环
是JDK1.5新增的功能,专门用于读取数组或集合中的所有元素,即对数组进行遍历
如 int[] c={1,2,3};
for(int m:c){
System.out.println(m);
}
抽象类(abstract)
是一种模板模式,为所有子类提供了一个通用模板,所有子类可以在这个模板的基础上进行扩展。
通过抽象类,可以避免子类设计的随意性
要点
1、有抽象方法的类一定要定义成抽象类(有方法声明无方法体的方法叫做抽象方法,如:public void run();)
2、抽象类不能被实例化,即不能通过new被实例
3、抽象类可以有属性、方法、构造方法,但是构造方法不能用来new实例,只能被子类调用
4、抽象方法必须被子类实现
抽象方法的意义在于将设计与实现分开
接口()
1、为什么需要接口
接口就是比抽象类更抽象的抽象类,可以更加规范地对子类进行约束,全面专业地实现规范与具体实现的分离。
接口就是规范,定义了一组规则。
项目是多变的,因此我们必须以不变应万变才能从容开发,此处的不变就是规范,因此我们在开发项目时往往是面向接口编程。
2、如何定义接口
格式:[访问修饰符] interface 接口名 [extends 父接口1,父接口2,......]{
常量定义 无论有还是没有总是public static final
方法定义 无论有还是没有总是public static
}
如:
public interface TestInterface {
//接口中只有常量和抽象函数
/*public static final无论写还是不写,定义的变量都有这个*/ String MAX_DEGREE="BOSS";
int MAX_SPEED=120;
/* public abstract*/public void test01();
/* public abstract*/void test02();
}
3、要点
1、子类通过implements来实现接口的规范
如:public class MyClass implements TestInterface{
public void test01() {
System.out.println(TestInterface.MAX_DEGREE);
}
@Override
public void test02() {
// TODO 自动生成的方法存根
}
}
2、接口不能用于创建实例,但可以用于声明引用变量类型
3、一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public
4、接口支持多继承
如:package cn.sxt.oop.interfaceTest;
public interface InterfaceA {
void aaa();
}
interface InterfaceB{
void bbb();
}
interface InterfaceC extends InterfaceA,InterfaceB{
void ccc();
}
class MyClass implements InterfaceC{
@Override
public void aaa() {
// TODO 自动生成的方法存根
}
@Override
public void bbb() {
// TODO 自动生成的方法存根
}
@Override
public void ccc() {
// TODO 自动生成的方法存根
}
}