继承 is-a
1.子类继承父类,通过关键字 extends
2.子类的对象可以调用父类中的(public protected)属性和方法
3.子类可以添加自己独有的属性和方法
4.子类从父类中继承过来的方法不能满足子类需要,可以在子类中重写父类方法
5.每一个类都有继承类,如果不写extends关键字,默认继承object,如果写了extends则继承后面那个父类
7.继承在内存中的存储形式
8.this(代替是当前调用方法属性时的那个对象, 不一定是当前类的对象)
super(代替的是当前调用方法属性时的那个对象的父类对象)
可以调用构造方法,但是必须放在第一行;构造方法之间不能互相调用
重写override 重载overload
- 类 产生两个继承关系的类 一个类中的一组方法
子类重写父类的方法 - 权限 子类可以大于等于父类 没有要求
- 特征 final static abstract 没有要求
父类方法是final 子类不可重写
父类方法是static 子类不存在
父类方法是abstract 子类必须重写
(子类是具体必须重写 否则子类是抽象类 可以不重写) - 返回值 子类可以小于等于父类 没有要求
- 名字 子类与父类一致 一个类中的好多方法名必须一致
- 参数 子类与父类一致 每个方法的参数必须不一致(个数、类型、顺序)
- 异常 运行时编译 没有要求
如果父类方法抛出运行时异常
子类可以不予理会
如果父类方法抛出编译异常
子类抛出异常的个数少于等于父类
子类抛出异常类型小于等于父类 - 方法体 子类的方法内容与父类不一致 每一个重载的方法 执行过程不一致
包含(组合、聚合、关联)has-a
1.组合: 人和大脑 人和心脏 整体和部分的关系,不可分割 要么都出现,要么都消亡
2.聚合:汽车和车轮 电脑和主板;整体和部分的关系 创建时有可能分开
3.关联:人和汽车 人有电脑 整体和部分的关系 可以分割 后来形成在一起
一个类的对象,是另外一个类的属性(房间和电脑、房子和房间、楼和房子、小区和房子)
- 新建一个房间类,一个电脑类,房间类中有一个属性是电脑类
依赖 use-a
- 屠夫 杀 猪 农夫 养 猪
- 新建屠夫类、农夫类、猪类
- 屠夫类中有杀猪方法、农夫类中有养猪方法、猪类有成长方法和被杀方法
public class Pig {
private String name;
private Integer weight;
public void bekill(){
System.out.println("我是猪,被杀啦");
}
public void growup(int mon){
this.weight = 2;
for (int i=0;i<mon;i++){
weight *= 2;
System.out.println(this.weight);
}
}
public Integer getWeight(){
return this.weight;
}
}
public class Butcher {
public void shazhu(Pig pig){
Integer we = pig.getWeight();
System.out.println("猪的体重:" + we);
if (we>=16){
pig.bekill();
}else {
System.out.println("猪太小了 长长再杀");
}
}
}
public class Farmer {
public Pig yangzhu(Integer mon){
Pig pig = new Pig();
pig.growup(mon);
return pig;
}
}
public class Test {
public static void main(String[] args) {
Farmer farmer = new Farmer();
Pig pig = farmer.yangzhu(2);
Butcher butcher = new Butcher();
butcher.shazhu(pig);
}
}
运行结果
4
8
16
猪的体重:16
我是猪,被杀啦