1 抽象 Abstract
抽象的 不具体(信息不完整)
// 一个没有方法体的方法应该定义为抽象方法
// 一定被继承
修饰 : 类、普通方法
特点:
1 抽象方法 不能有方法体 ({}也是方法体的一部分)
2 有抽象方法的类必须是抽象类,但抽象类中可以没有抽象方法
3 抽象类可以定义引用,但不可以创建对象
抽象类存在的意义不是用于创建对象 而是被子类继承 为子类定义规范
抽象方法存在的意义不是被对象调用 而是为子类的方法定义规范 定义方法声明
4 抽象类有构造方法:用于创建子类对象时 把抽象类中定义的成员变量和实例方法加载进子类对象内存中
5 子类继承抽象类 除非“重写”所有的抽象方法 否则仍然是抽象类
“重写”所有的抽象----实现implement
(根据抽象的特点:可以修改以前的代码)
abstract类的引用使用一定是多态
abstract class Demo03{
int a;
void show() {}
abstract void hehe();
abstract void haha();
Demo03(){}
Demo03(int a){}
}
//---------------------
abstract class Animal2{
String name;
String type;
public Animal2(String name, String type) {
this.name = name;this.type = type;
}
//Animal信息不完整 无法实现eat和yunDong 此方法存在的意义::为子类定义规范
abstract void eat();
abstract void yunDong();
}
2 接口 interface
当一个抽象类的所有方法都是抽象方法时 可以定义为接口
接口::协议
类似于特殊的抽象类: 接口已经不属于类的范畴
使用:就当抽象类使用即可
关键字:interface
作用:为实现类定义规范
特点:
- 1 接口可以定义引用(多态) 但不能创建对象//创建对象是类的事
- 2 接口没有构造方法
- 3 接口中的方法 默认修饰符 public abstract
- 4 接口中的成员变量 默认修饰符public static final
- 5 实现类实现接口通过关键字implements: 一个类可以实现多个接口 并且同时还可以继承父类
如:class Inter1Class extendsDemo05Fu implements Inter1,Inter2{} - 6 接口中可以定义默认方法:实现类可以选择去实现接口的默认方法;如果不实现 就使用接口中定义的
如:default void hai() {}//默认方法 - 7 接口之间是多继承的关系:一个子接口可以同时继承多个父接口
如:interface Inter3 extendsInter1,Inter2{}
优点: 增加扩展性 降低耦合度
关系 | 关键字 | 总结 | 案例 |
---|---|---|---|
类与类 | extends | 单继承 | class Zi extends Fu{} |
类与接口 | implements | 多实现 | class Zi implements inter1,inter2,inter3{} |
接口与接口 | extends | 多继承 | interface inter1 extends inter2,inter3{} |
3 范围修饰符
范围修饰符 | 名称 | 本类 | 本包的子类 | 本包的非子类 | 其他包的子类 | 其他包的非子类 | 总结 | 类似于 |
---|---|---|---|---|---|---|---|---|
public | 公共的 | 可以 | 可以 | 可以 | 可以 | 可以 | 整个项目 | 同一个物种 |
protected | 受保护的 | 可以 | 可以 | 可以 | 可以 | 否 | 本包和其他包的子类 | 关心的 |
(default) | 省略的 | 可以 | 可以 | 可以 | 否 | 否 | 本包 | 村支书 |
private | 私有的 | 可以 | 否 | 否 | 否 | 否 | 本类 | 存折 |