JAVA学习日志7
抽象类
一种不能被实例化的类,其成员方法是对若干子类方法的抽取
1.语法: 访问控制修饰符 abstract class 类名{成员}
- 抽象方法
抽象方法只能存在抽象类(或 接口)中,抽象方法没有任何方法体,他在抽象类中的作用是提出这样的一个方法,让子类去实现(实际是重写)这个方法 - 抽象类的特点
- 抽象方法和抽象类都是要abstract关键字修饰
- 抽象方法只能存在于抽象类(或接口)中,抽象类中也可以存在普通方法
- 抽象类不能被实例话
- 继承了抽象类的子类,必须实现父类里全部的抽象方法,如果子类也是抽象类则不用区实现
- 抽象类中的成员
1.抽象类中的成员变量不能用abstract修饰
2.抽象类可以有构造方法(虽然抽象类不能实例化),主要是用来让子类调用( super()),从而借助子类来给成员变量赋值
3.抽象类中的抽象方法子类必须重写,普通方法其实也是用来给子类进行重写但没有强制性要求
接口
定义了规范 和 约束,接口里定义的全部是抽象的方法,实现这个接口的类必须全部实现这些方法
- 使用接口的好处:
1.对接口的实现类进行约束
2.方法与申明与具体的实现进行的分离 ,代码结构清晰 降低代码的耦合度 - 定义语法 访问修饰 符 interfance 接口的名字{ }
- 注意事项
1.接口中只能有抽象方法不能有普通方法
2.如果接口中的方法没有写 abstract ,依旧会把它当作抽象函数,因为有默认 的 public abstract 修饰符
3.接口不能被实例化
4.jdk1.8后可以在接口中定义静态方法 - 接口的实现类
- 语法: (一个类可以实现多个接口,实际上解决了java中无法多继承的问题)
public class 类名 implements 定义的接口1,定以接口2{
} - 接口的实现类 实现接口中的所以的 抽象方法(不包含静态方法)
- 通过实现具体实现类来进行调用(多态中的向上转型),接口中定义的静态方法 必须通过接口名字.方法名来进行调用 ,不能实例化对象来进行调用
.
- 接口中的成员
1.接口中是没有变量 只有常量,默认会用 public static final 来进行修饰
2.接口中常量 必须在申明的时候 就给其进行赋值(因为接口无法初始化成员)
3.接口中的常量都需要大写 单词与单词 下划线进行分割(参考常量的命名规则)
4.接口中没有构造方法 因为构造是实例化对象 或者是成员变量来进行赋值 ,而接口是不能实例化的。 接口没有变量 所以也不需要构造方法
5.接口中必须都是 抽象方法 但是jdk1.8以后 可以存在静态方法 静态方法是只能通过接口的名称来调用 - 类与类 接口与类 接口与接口之间的关系
1.类与类之间是单继承的 ,但类可以实现多个接口
2.接口之间可以继承,且支持多继承
3.抽象类 与接口
相同点:
1.都不能实例化 对象
2.都可以来定义抽象方法
3.接口与抽象类中的方法 都是为 给子类进行重写
不同点:
1.接口可以多继承(实现),抽象类 不可以多继承
2.接口中所以 的方法都必须是抽象方法 ,抽象类中可以有普通方法也可以有抽象方法
3.抽象类可以成员变量 可以构造方法 接口 里没有成员变量 与构造方法
匿名内部类
1.没有名字的内部类 就称为匿名内部类
2.前提条件 1.必须是抽象类 2.必须是一个接口
3.语法: (注意末尾的分号)
new 抽象类或者是接口(){
实现的抽象方法
};