接口与抽象类
来源:互联网 发布:手机卡 非实名 淘宝 编辑:程序博客网 时间:2024/05/29 11:18
抽象类:
可以定义变量但是最少要有一个方法,当多个抽象类出现相同功能 但是功能主体不同
这是可以进行向上抽取 这事 只抽取功能定义 而不抽取功能主体必须有一个抽象类方法 抽象类方法没有主体
抽象:模糊 看不懂
抽象类的特点:
1.抽象方法一定在抽象类中
2.抽象方法和抽象类都必须备abstrct关键字修饰
3.抽象类不可以用new创建对象 因为调用抽象类方法没意义
4.抽象类中的方法要被使用 必须由子类重写主类的功能主体 然后建立子类对象调用
如果子类只覆盖了部分抽象方法 那么该子类还是一个抽象类
抽象类和一般类没有太大的不同
1.方法只有声明没有实现时 该方法就是抽象方法 需要被absstatic修饰
抽象类方法必须定义在抽象类中 该类也必须被absstatic修饰
2.抽象类不可以被实例化,为什么?
抽象类是个模糊的概念如果实例化 抽象类就不能达到效果
该如何描述事物 就如何描述事物 只不过 该事物中出现了看不懂的东西
这些不确定的部分 也是该事物的功能 需要明确出现 但是无法定义主体
抽象类比一般类多了抽象函数 可以在类中定义抽象方法
抽象只能修饰类和方法
抽象类不可以实例化
特殊:
抽象类中可以不定义抽象方法 这样做仅仅是不让该类建立对象
抽象类中不可以喝那些关键字共存:
private:私有 [因为如果将抽象方法私有后 子类无法覆盖 也无法调用]
static:静态[如果使用了静态后 就不需要对象了 直接类名调用 但是只能抽象方法运行 子类不能运行 则无意义]
final:最终的:[如果修饰了抽象方法则多个子类无法覆盖]
抽象类和一般类:
相同点:
都是用来描述事物的 都在内部定义了成员
不同点:
1.一般类有足够的信息描述事物,抽象类描述的事物信息不足
2.一般类中不能定义抽象方法,抽象类中可定义抽象方法 也可以定义非抽象方法
3.一般类可以被实例化,抽象类不能被实例化,抽象类必须是一个父类 因为需要子类的覆盖方法才可以实例化
1.接口:
(1)当一个类中的方法都是抽象的时候,Java提供了另一种表示方式,叫接口。
用interface关键字表示。类与接口关系用implements表示。
(2)接口的成员特点
A:成员变量
是常量,默认修饰 public static final
B:成员方法
都是抽象的,默认修饰 public abstract
(3)关系
A:类与类的关系
是继承关系。类与类只能单继承,可以多重继承。
B:类和接口的关系
是实现关系。类可以多实现接口。
类在继承一个类的同时,可以实现多个接口。
C:接口和接口的关系
是继承关系。接口可以多继承接口。
(4)接口的特点
A:是对外暴露的规则
B:是功能的扩展
C:接口的出现降低耦合性。
耦合(类与类之间的关系)
内聚(类完成功能的能力)
编程规范:低耦合,高内聚。
D:接口可以多实现。如:CPU和主板、笔记本的USB插口、插座
(5)接口和抽象类的区别
A:抽象类只能被单继承
接口可以多实现,接口的出现避免了多继承的局限性。
B:抽象类中的数据特点:
成员变量:可以是变量,也可以是常量
成员方法:可以是抽象方法,也可以是非抽象方法
构造方法:有构造方法
接口中的数据特点:
成员变量:是常量。默认修饰 public static final
成员方法:都是抽象方法。都有默认修饰 public abstract
构造方法:没有构造方法
C:抽象类中定义的是继承体系中的共性功能。
接口中定义的是继承体系中的扩展功能。
D:抽象类被继承是"is a"关系:xx是yy的一种
接口被实现是"like a"关系:xx像yy的一种
定义接口格式:
[public]interface 接口名称 [extends父接口名列表]
{
//静态常量
[public] [static] [final] 数据类型变量名=常量值;
//抽象方法
[public] [abstract] [native] 返回值类型方法名(参数列表);
}
实现接口格式:
[修饰符] class 类名[extends 父类名] [implements 接口A,接口B,···]
{
类成员变量和成员方法;
为接口A中的所有方法编写方法体,实现接口A;
为接口B中的所有方法编写方法体,实现接口B;
}
代码:
这里提一下final关键子:
final:
最终 作为一个修饰符
1.可以修饰类,函数,变量
2.被final修饰的类不可以被继承 为了避免被继承 被子类重写功能
3.被fianl修饰的方法 不可以被重写[覆盖]
4.被fianl修饰的变量是个常量只能赋值一次 即可以修饰成员变量 也可以修饰局部变量
[当在描述事物时 一些数据的出现值是固定的 那么这时为了增强阅读行 都给这些值赋值名字方便运行
而这个值不需要改变 所以加上 fiaal 作为常亮的书写规范所有字母都大写 如果由多个字母组成单词间通过_连接]
- 抽象类与接口
- 接口与抽象类
- 抽象类与接口
- 抽象类与接口
- 抽象类与接口
- 抽象类与接口
- 接口与抽象类
- 抽象类与接口
- 接口与抽象类
- 抽象类与接口
- 抽象类与接口
- 抽象类与接口
- 接口与抽象类
- 抽象类与接口
- 抽象类与接口
- 抽象类与接口
- 接口与抽象类
- 接口与抽象类
- String、StringBuffer与StringBuilder之间区别
- OOM详解
- 148. Sort List
- Labview之子面板的使用
- Minimum Window Substring
- 接口与抽象类
- guava字符串处理——连接器[Joiner]
- JNI - Caching IDs
- maven编译zepplin源码_win10
- CSS选择器&伪类
- 告诉你Hadoop是什么 [转]
- String与StringBuffer的区别
- Oracle数据库获取其中的数据和分页
- 安卓中md5加密算法。