第3天

1.引用类型数组----创建对象数组

      Student[] stus=new Student[4];//创建Student对象数组
      stus[0]=new Student("张三");//创建Student对象
      System.out.println(stus[0].name);//stus[0]输出地址,stus[0].name输出地址指向的对象

1)概念:

        1.1)数组也是对象
        1.2)数组属于引用数据类型
        1.3)作用就是代码复用-------简化代码,使代码可以重复被调用(把重复的代码抽成一个专门的类)

2)声明

        2.1)声明基本类型数组:int[] arr=new int[4];
        2.2)声明引用类型数组:Airplane[] as=new Airplane[4];

3)初始化

        3.1)默认初始值都为null------使用之前必须初始化,否则可能引起空指针异常
        3.2)as[0]=new Airplane();//数组中第一个元素指向具体的对象(小敌机)

2.继承

        1)泛化的过程:把多个派生类/子类(Sub class)里面共有的属性抽成(泛化)到一个超类/父类(Super class)
        2)继承的过程:将父类中的属性都继承到每个子类中
        3)extends关键字:通过extends可以实现类的继承
        4)子类可以继承父类的成员变量/方法(除了构造方法以外),也可以定义自己的成员变量/方法
        5)java不支持多重继承,一个类只能继承一个父类(单一继承),但一个父类可以有多个子类

1)父类的构造方法不能被继承(在子类中不能被直接调用)

2)在子类中调用父类的构造方法---super(属性1,属性2,...);

class FlyingObject{
        共有属性1;
        共有属性2;
        ...
    FlyingObject(共有属性1,共有属性2,...){
        共有属性1=初始值;
        共有属性2=初始值;
        ...
    }
}
class Airplane extends FlyingObject{
        私有属性1;
        私有属性2;
        ...
    Airplane(){
        super(共有属性1,共有属性2,..);
    }
}

3.继承中的构造器----super的用法(Constructor---构造器也翻译为构造方法)

    1)子类不能继承父类的构造方法
    2)但子类可以使用super()调用父类构造方法,这样可以实现多个子类重用父类构造方法的初始化算法
    3)如果子类不写super()方法调用构造器,java编译器会自动添加super()---父类中要有无参构造方法
    4)子类一定调用父类的构造器,如果不使用super(),则java自动添加super()去调用父类中的无参构造器
    5)如果父类没有无参构造器,则会发生编译错。----为了避免子类出现编译错误,一般建议所有类都添加无参构造器

补充:

1)继承要符合is a的要求

例如:一个动物对象是动物类型的
     一个老虎对象是动物类型的

2)将多个子类中的公共属性和方法抽取到父类的过程称为泛化

3)实际开发中设计父类时候,是通过泛化子类实现的----所以继承也是一个泛化的过程

4)super() 必须写在构造器的第一行


Shoot射击游戏第一天:

1.创建了6个对象类,并创建World类测试

Shoot射击游戏第二天:

1.给6个对象类添加构造方法,并测试

Shoot射击游戏第三天

1.在World类中创建小敌机数组Airplane[10]/大敌机数组BigAirplane[10]/小蜜蜂数组Bee[10]/子弹数组Bullet[10]
2.对小敌机Airplane/大敌机Airplane/小蜜蜂Airplane/子弹Airplane
  这4个子类中的公有属性(width/height/x/y)泛化成一个父类---飞行物FlyingObject
3.在父类飞行物FlyingObject中添加构造方法对公有属性进行初始化,并在各子类中的构造方法进行调用super()且对私有属性进行初始化