173/174接口的抽象方法定义和抽象方法的使用
抽象方法的定义格式:
修饰符 abstract 返回值类型 方法名称(参数列表);
一个方法写上abstract关键字,去掉{},就是抽象方法
含有抽象方法的类,一定是一个抽象类.
抽象类的格式:
修饰符 abstract class 类名称 {
//...
}
抽象类的使用:
抽象方法不能直接new对象
必须定义一个子类继承抽象类
子类必须覆盖重写抽象类中所有抽象方法 去掉abstract关键字,加上{}
创建子类对象
通过子类对象调用方法
抽象类的注意事项:
抽象类不能创建对象,如果创建,编译无法通过而报错.只能创建其非抽象子类的对象
抽象类中,必须有构造方法,是供子类创建对象时,初始化父类成员使用的
抽象类中,不一定包含抽象方法,但是有抽象类方法的类必定是抽象类
抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错.除非该子类也是抽象类
(1)接口定义前默认修饰符为public。
(2)接口中变量默认修饰符为public static final。
(3)接口中方法默认的访问权限为public。
/*
接口就是多个类的公共规范。
接口是一种引用数据类型,最重要的内容就是其中的:抽象方法。
如何定义一个接口的格式:
public interface 接口名称 {
// 接口内容
}
备注:换成了关键字interface之后,编译生成的字节码文件仍然是:.java --> .class。
如果是Java 7,那么接口中可以包含的内容有:
1. 常量
2. 抽象方法
如果是Java 8,还可以额外包含有:
3. 默认方法
4. 静态方法
如果是Java 9,还可以额外包含有:
5. 私有方法
接口使用步骤:
1. 接口不能直接使用,必须有一个“实现类”来“实现”该接口。
格式:
public class 实现类名称 implements 接口名称 {
// ...
}
2. 接口的实现类必须覆盖重写(实现)接口中所有的抽象方法。
实现:去掉abstract关键字,加上方法体大括号。
3. 创建实现类的对象,进行使用。
注意事项:
如果实现类并没有覆盖重写接口中所有的抽象方法,那么这个实现类自己就必须是抽象类。
*/
public class Demo01Interface {
public static void main(String[] args) {
// 错误写法!不能直接new接口对象使用。
// MyInterfaceAbstract inter = new MyInterfaceAbstract();
// 创建实现类的对象使用
MyInterfaceAbstractImpl impl = new MyInterfaceAbstractImpl();
impl.methodAbs1();
impl.methodAbs2();
}
}
/*
在任何版本的Java中,接口都能定义抽象方法。
格式:
public abstract 返回值类型 方法名称(参数列表);
注意事项:
1. 接口当中的抽象方法,修饰符必须是两个固定的关键字:public abstract
2. 这两个关键字修饰符,可以选择性地省略。(今天刚学,所以不推荐。)
3. 方法的三要素,可以随意定义。
*/
public interface MyInterfaceAbstract {
// 这是一个抽象方法
public abstract void methodAbs1();
// 这也是抽象方法
abstract void methodAbs2();
// 这也是抽象方法
public void methodAbs3();
// 这也是抽象方法
void methodAbs4();
}
抽象方法的作用:
强制要求子类重写
举例:
/*
* Animal父类抽象类:
* class 前面有abstract关键字修饰的
* */
public abstract class Animal {
//抽象方法
//因为所有子类吃的东西,方法实现都不一样
public abstract void eat();
}
// Cat子类继承Animal父类
public class Cat extends Animal{
// 父类中的eat方法会被要求强制重写
@Override
public void eat () {
}
}
public abstract class Animal {
//抽象方法
public abstract void eat();
}
public class Cat extends Animal {
@Override
public void eat(){
System.out.println("猫吃鱼");
}
}
public class DemoMain {
public static void main(String[] args) {
Cat cat=new Cat();
cat.eat(); //猫吃鱼
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix