飞机大战分析:
对象提取类:小敌机/大敌机/自己的飞机/子弹/小蜜蜂
小敌机类:
成员变量:
int x,int y,图片,int width,int height
成员方法:
move()
大敌机类:
成员变量:
int x,int y,图片,int width,int height,int life
成员方法:
move()
自己的飞机类:
成员变量:
int x,int y,图片,int width,int height,int life,int score,子弹
成员方法:
move()
子弹类:
成员变量:
int x,int y,图片,int width,int height
成员方法:
move()
小蜜蜂类:
成员变量:
int x,int y,图片,int width,int height
成员方法:
move()
把所有类中相同的成员变量和成员方法 -> 提取出来 -> 形成一个类 -> 父类
升级版:
子类 extends 父类
父类(基类):
成员变量:
int x,int y,图片,int width,int height
成员方法:
move()
子类(衍生类/扩张类):
小敌机类:
大敌机类:
int life
自己的飞机类:
int life,int score,子弹
子弹类:
小蜜蜂类:
1.继承(extends)
1.结构:
子类(衍生类/扩张类) extends 父类/基类
2.继承的特征
1)子类继承父类,会继承父类所有的成员变量和成员方法
2)所有的类都有唯一一个父类 如果没有写父类,那么就会默认继承Object
3)子类可以拥有自己的成员变量和成员方法 并且子类的功能一定比父类的更强大
4)一个类只能继承一个父类 父类可以拥有很多个子类
特殊情况:
1.创建子类对象之前,会先创建父类对象 加载子类之前会先加载父类
2.构造方法:
调用子类构造方法之前,一定会调用父类的构造方法,默认调用父类的无参构造方法
3.子类中可以引用父类对象
4.子类和父类中有相同的成员变量时
例如:name
那么会先去运行子类中属性,如果没有才会去找父类中的成员变量
建议:子类和父类中不要有相同的成员变量
5.通过子类对象调用方法时 会先去找子类中有没有这个方法,如果有就实现子类中的内容;如果没有就会去找父类中的这个方法
2.super关键词
1)调用子类构造方法之前,一定会调用父类的构造方法,默认调用父类的无参构造方法
使用super关键词调用
2)父类中的构造方法 只能调用,不能继承,默认添加super()
3)如果父类中没有无参构造方法,就需要手动调用父类中的有参构造方法
super(参数)
4)super (参数),只能放在第一行
3.方法重写
1)重写的前提:
必须存在父子类关系
2)语法结构:
子类的方法名+方法参数+返回值类型都必须和父类中一致
方法的重写(Override)和方法的重载(Overload)的区别:
方法的重写的前提:
必须在父子类关系中
方法的重载的前提:
必须在同一个类中
参数不一样:
个数 顺序 类型
this和super的区别:
this表示当前对象
super表示父类对象
4.抽象(abstract)
abstract可以修饰类和方法
1)抽象方法:
a.出现的前提:
例如:move()
所有的子类中的move()都有不用的实现,那也就是说明父类中的move()方法体没有意义
没有意义的东西不需要 -> 删除 ->抽象方法 ->加abstract
b.子类必须重写父类中的抽象方法 如果不重写,就要把自己变成抽象类
c.抽象方法的特点
1.没有方法体的方法叫抽象方法
2.抽象方法一定要存在于抽象类中
2)抽象类
a.abstract修饰的类叫抽象类
b.抽象类不能new对象,也就是不能创建类的实例化(new dog())
c.抽象类也有构造方法.就是为了给子类使用
3)abstract不能修饰成员变量,因为成员变量是有具体的类型
判断:
有抽象方法的类就是抽象类 √
抽象类就是有抽象方法的类 ×
没有抽象方法的也是抽象类 √
5.访问修饰符/权限控制符
public:公开的,公共的
protected:受保护的 -> 经常修饰有父子类关系的类
default:默认的,(default)是不写的,没有这个词
private:私有的
访问控制符可以修饰类/可以修饰[静态]成员变量/修饰[静态]成员方法/代码块
自己类中: public protected default private
同包(没有任何关系的类/不同类): public protected default
不同包下(有父子关系的类): public protected
所有类(不同包下没有父子关系得类): public
访问权限范围:
最大得是public 最小的是private
使用情况:
public:想让所有的类都可见时
protected:在父子类关系中可用
default:不常用,练习时使用
private:普通类中都可用
get/set
面向对象4大特征:封装 继承 多态 抽象