抽象类和接口
- 一、抽象类
-
- 1.1由来
- 1.2概念
- 1.3定义
- 1.4语法规则
- 1.5抽象方法跟子类的联系
- 二、接口
-
- 2.1概念
- 2.2定义
- 三、总结
一、抽象类 1.1由来 “用进废退”
多态的领域 重写的方法被子类覆盖 不可能被调用到 索性去掉方法体 退化为抽象方法。
1.2概念 将父类中被重写的方法的方法体删掉,用abstract修饰,就相当于将这个方法声明为一个抽象方法,顺带将该类声明为抽象类。前提该方法中的方法体没有任何实际的作用。
相对于对象而言,类本身就是一个抽象的概念,为了更进一步体现出类的抽象性,我们可以用关键字abstract去修饰类。
抽象方法:父类(定目标)和子类(实现目标)的分工。
1.3定义 父类:
public abstract class Fu {
//抽象方法可以理解为上层制定的宏伟目标,下层必须落实
public abstract void a();
}
【01|小饶学编程之JAVA SE第一部分——面向对象(10抽象类和接口)】子类:
public abstract class Zi extends Fu {
public void a() {
System.out.println("公司上市了!");
}
}
1.4语法规则
- 1.被abstract修饰的类是抽象类。
- 2.抽象类中可以有抽象方法,也就是被abstract修饰的方法,也可以没有。
- 3.抽象方法没有方法体,只有方法声明。
- 4.子类继承抽象类需要重写父类所有的抽象方法,否则,子类也必须声明为抽象类
- 5.抽象类有构造方法,但是不能被显示调用,也就是不能实例化,或者说抽象类没有对象。
- 6.抽象类的构造方法只在子类实例化时隐式调用。
- 7.抽象类的使用一般是作为引用类型,指向非抽象的引用实例,体现出多态。
- 8.构造方法和静态方法都不能(abstract)抽象修饰。(静态方法不能被子类覆盖(重写),一旦声明为抽象方法 将永远没有具体的实现)
- (1)如果子类完全实现了父类的抽象方法,那么子类可以不用声明为抽象类。
- (2)如果子类没有完全实现父类的抽象方法,那么子类必须声明为抽象类。
- 接口可以理解为定义的一组通用的组件,或者是功能模块。可替换,可拆卸。
- 接口比抽象类更抽象,已经完全抽象得没边没影。
- 和定义类的区别在于,将class关键字换成了interface
- 所有的成员属性都是 public static final (公共的静态的常量)类型
- 所有的方法都是:public abstract (公共的抽象方法)
public interface Hello1 {
void a();
//接口的成员方法
int A=6;
//接口的成员属性
}
三、总结
- 1.抽象度:接口>抽象类>类>对象
- 2.抽象类不能显示调用构造方法,不能直接创建对象,但可以在子类调用构造方法时隐式被调用。
- 3.接口中只有抽象方法,没有构造方法和静态方法。
- 4.接口:提供连接外部组件的口子。所以属性和方法都必须是public
- 5.抽象类抽掉了对象的概念,接口进一步抽掉了类的概念。
- 6.接口中的属性没有set/get,也就是不能封装,是static final类型,因为接口已经不再可以理解成类,而是一个组件。组件的属性在出厂时就已经定型了。
- 7.多态的演变:
- Fu f=new Zi(); Fu是一个普通类
- Fu f=new Zi(); Fu是一个抽象类
- Fu f=new Zi(); Fu是一个接口,(使用最多)
- 8.Static(静态)只修饰类的成员属性和方法,不修饰局部变量,也就是定义在方法体中的变量。静态方法表示类所特有的功能,这种功能的实现不依赖于类的具体实例,也不依赖于它的子类。因此,当前类必须为静态方法提供实现。(类加载时,会加载类的静态属性和方法)
- 9.abstract(抽象)只修饰类和方法,不修饰属性和变量。
- 10.抽象方法没有方法体:
子类继承父类,往往会重写父类的方法,也就是会覆盖父类的方法,这个时候,父类的方法体基本没有用,所以直接不要方法体,用abstract修饰,变成抽象方法。再看静态方法,它是属于类空间,不可以被重写,所以自然不能省略掉方法体。构造方法也不能被重写,自然也不能被abstract修饰。
推荐阅读
- JavaSE|JavaSE——面向对象(五)(抽象类,接口)
- 团队vue基础镜像选择思考
- 敖丙大佬的《吐血整理》-顶级程序员书单集 JAVA
- http|HTTP 流量拷贝测试神器 GoReplay
- mvnd打包快到飞起
- 基础算法
- Arrays.toString() 的用法
- JavaSE进阶Day01
- Spring|小唐开始学 Spring Boot——(3)利用mybatis访问数据表