当前位置:网站首页>抽象类和接口(学习笔记)
抽象类和接口(学习笔记)
2022-07-30 22:30:00 【修身课】
抽象类
当父类的一些方法不能确定时,可以用abstract关键字类修饰该方法,这个方法就是抽象方法,用abstract来修饰该类就是抽象类
抽象类的介绍
1.用abstract关键字类修饰一个类时,这各类就叫抽象类
访问修饰符 abstract 类名{}
2.用abstract关键字修饰一个方法时,这个方法就是抽象方法
访问修饰符 abstract 返回类型 方法名(参数列表);//没有方法体
3.抽象类的价值更多的作用在于设计,设计者设计好的后,让子类继承并实现抽象类
抽象类的使用的注意事项和细节
1.抽象类不能被实例化

2.抽象类不一定要包含abstract方法,也就是说,抽象类可以没有adstract方法
3.一旦类包含了abstract方法,则这个类必须声明为abstract

4.abstract只能修饰类和方法,不能修饰属性和其他的

5.抽象类可以有任意成员【抽象类的本质来说类】,比如:非抽象方法、构造器、静态属性
6.抽象方法不能有主体
7.如果一个类继承了抽象类,则它必须实现所有的抽象方法,除非它自己也声明为abstract类
8.抽象方法不能使用private、final、static来修饰,因为这些关键字都是和重写相违背的
模板设计模式
最佳实践
public abstract class Template {
public abstract void job();
public void caleTimes(){
long start=System.currentTimeMillis();
job();
long end=System.currentTimeMillis();
System.out.println("执行时间:"+(end-start));
}
}
public class AA extends Template{
@Override
public void job() {
for (int i = 0; i < 1000000; i++) {
}
}
}
public class BB extends Template{
@Override
public void job() {
for (int i = 0; i < 2000000; i++) {
}
}
}
public class Demo {
public static void main(String[] args) {
AA aa = new AA();
aa.caleTimes();
BB bb = new BB();
bb.caleTimes();
}
}总结:相同调用,不同抽象
接口
接口就是给出一些没有实现的方法,封装到一起,到某个类使用的时候,在根据具体情况把这些方法写出来
interface 接口名{
//属性
//方法(抽象方法 默认实现方法 静态方法)
}
class 类名 implements 接口{
自己属性;
自己方法;
必须实现接口的抽象方法
}
在jdk7.0前 接口里的所有方法都没有方法体,即都是抽象方法
jdk8.0后可以有静态方法,默认方法,也就是说接口中可以有方法的具体实现
接口注意事项
1.接口不能被实例化
2.接口中所有的方法是 public方法,接口中抽象方法,可以不用adstract修饰
3.一个普通类实现接口,就必须将开接口的所有方法都实现
4.抽象类实现接口,可以不用实现接口的方法
5.一个类可以实现多个接口
6.接口的属性只能是final
7.接口中属性的访问形式:接口名.属性名
8.接口不能继承替他的类,但是游客一定多个看哟

9.接口的修饰符 只能是 public 和默认,这点和类的修饰符是一样的
接口实现和继承
接口和继承解决的问题不同
继承的价值主要在于:解决代码的复用性和可维护性
接口的价值主要在于:设计好各种规范,让其他类去实现这些方法
接口比继承更加灵活
继承时满足is - a的关系,而接口只满足like - a的关系
接口在一定程度上实现代码解耦【接口规范性+动态绑定】
接口的多态特性
接口存在多态传递特性
小结
类的五大成员:1.属性 2.方法 3.构造器 4.代码块 5. 内部类
边栏推荐
猜你喜欢

Navicat connection MySQL error: 1045 - Access denied for user 'root'@'localhost' (using password YES)

DistSQL in-depth analysis: creating a dynamic distributed database

ClickHouse删除数据之delete问题详解

只会纯硬件,让我有点慌

482-静态库、动态库的制作、使用及区别

Py之pdpbox:pdpbox的简介、安装、案例应用之详细攻略

二进制序列

MySql 5.7.38下载安装教程 ,并实现在Navicat操作MySql

【2022-05-31】JS逆向之易企秀

MySQL 5.7 detailed download, installation and configuration tutorial
随机推荐
ClickHouse to create a database to create a table view dictionary SQL
Go1.18升级功能 - 泛型 从零开始Go语言
Go语学习笔记 - gorm使用 - 表增删改查 Web框架Gin(八)
Py's pdpbox: a detailed introduction to pdpbox, installation, and case application
cnpm installation steps
连号区间数
1064 Complete Binary Search Tree
IDEA 连接 数据库
Solve the problem of centos8 MySQL password ERROR 1820 (HY000) You must reset your password using the ALTER USER
宁波中宁典当转让29.5%股权为283.38万元,2021年所有者权益为968.75万元
QT 在父类中添加子类的流程,object tree,
cmd(命令行)操作或连接mysql数据库,以及创建数据库与表
力扣题(2)—— 两数相加
TransGAN code reproduction - Jiutian Bisheng Platform
win10重建索引
MySql 5.7.38 download and installation tutorial, and realize the operation of MySql in Navicat
【CTF】buuctf web 详解(持续更新)
Regular expression syntax and usage
MySQL压缩包方式安装,傻瓜式教学
MySQL 8.0.29 decompressed version installation tutorial (valid for personal testing)