JAVA 抽象类 和 接口
来源:互联网 发布:性格测试软件 编辑:程序博客网 时间:2024/05/19 20:43
一、抽象
- 使用 abstract 修饰
- abstract 修饰类 抽象类
- abstract 修饰方法 抽象方法
- 抽象方法,没有实现的部分
注意:
抽象类中的抽象方法,强制子类去重写
抽象类不能实例化对象(不能创建对象)
抽象类中:
- 成员变量,可以有成员变量,也可以有常量。
- 成员方法,可以有抽象方法,也可以有成员方法
- 构造方法,有构造方法。
注意:
抽象类中不一定有抽象方法,但是抽象方法一定存在抽象类中。
抽象类的子类,一定要重写父类的所有抽象方法。
举例public class Demo01{ public static void main(String[] args){ //父类的引用 指向 子类的对象 Animal animal = new Cat(); animal.eat(); // 打印猫吃鱼 animal.fun(); // 打印 我是成员方法 }}abstract class Animal{ final int num1 = 5; // 可以定义常量 int num2 = 10; // 可以定义变量 public Animal(){ // 无参构造方法 System.out.println("我是父类的抽象方法") } public void fun(){ // 我是成员方法 System.out.println("我是成员方法") } public abstract void eat();// 定义一个抽象方法 eat()}class Cat extends Animal{ public Cat(){ super(); } public void eat(){ //方法的重写 System.out.println(猫吃鱼); }}// 最后的打印结果// 我是父类的抽象方法// 猫吃鱼// 我是成员方法
1.一个类就算没有抽象方法,也可以定义成一个抽象类,作用是禁止创建抽象类的对象出来,只能使用其子类。
2.abstract 和 哪些关键字不能共同使用
abstract 和 static
static 修饰方法 用法 用类名区调用,abstract 修饰抽象方向,没有方法的实现,没有实现部分的方法,只能是方法的生命,无法直接调用,所以不能共存。
abstract 和 final
final 修饰方法 不能被重写。而abstract 修饰方法 就是为了让子类重写方法,所以不能共存。
abstract 和 private
private 修饰方法,只能本类访问,子类无法访问,没有办法重写。
二、接口
- 狭义的接口:interface 关键词修饰的 叫做接口
- 广义的接口:规则
定义接口的写法:
interface 接口名{}
接口特点:
- 接口中,只能声明抽象方法
- 如果你不写 public abstract 关键词修饰 接口中 声明的方法。那么系统会默认帮你添加。
- 接口也不能实例化对象(谁要用接口,就谁要去实现接口中的方法。)可以使用多台的方式创建子类(实现类的对象)
- 接口的实现,使用implement关键词
接口注意:
- 成员变量 :只能有常量, public static final 常量名 = 初值,当你在接口中声明变量时,系统默认回事public static final 修饰变量。
- 成员方法:只有抽象方法,没有成员方法
- 构造方法:没有构造方法。
类和类的关系:
类和类 之间 是继承关系 单继承和多层继承
类和接口的关系:
类和接口 是实现的关系,可以单实现,也可以多实现。
接口和接口的关系:
接口和接口的关系,可以多继承也可以单继承
举例public static Demo02{ public static void main(String[] args){ InterA a = new Person(); // a.print(); //打印 我是人类的打印 InterZ z = new Car; z.fun(); z.fun1(); }}// 定义一个接口 interfaceinterface InterA{ // 定义一个抽象方法 public abstract void print();}class Person implements InterA{ // 实现这个方法 public void print(){ System.out.println("我是人打印的") }}interface InterX{ public abstract void fun();}interface InterY{ public abstract void fun1(){ }}inter face InterZ extends InterX, InterY{}class Car implements InterZ{ // 接口的多继承 public void fun(){ System.out.println("我是fun") } public void fun1(){ System.out.println("我是fun1") }}//最终的打印结果 // 我是人类的打印// 我是fun// 我是fun1
JDK 1.8之后进行了优化。
优化之后可以写成员方法:静态的方法, 默认的方法
- 不能直接调用默认方法,因为接口不能创建对象
- 必须使用该接口的实现类的对象去调用
- 默认方法在实现类中不强制你重写。
抽象类 和 接口的区别
成员变量
抽象类:可以有成员变量,也可以有常量
接口: 只可以有常量
成员方法
抽象类:可以有成员方法,也可以由抽象方法
接口: 可以有静态成员方法,可以有默认成员方法,可以有抽象方法
构造方法
抽象类:有构造方法
接口:没有构造方法
举例public class Demo03{ public static void main(String[] args){ // 接口中的静态成员方法可以使用接口名直接调用 InterA.staticSayHi(); // 接口的引用指向 实现类的对象 InterA aimp = new InterAImp(); // aimp调用sayHi()方法 aimp.sayHi(); // aimp调用defaultSayHi()方法 aimp.defaultSayHi(); }}interface InterA{ public abstract sayHi(); // 接口中的抽象方法,实现类中必须重写 public static void staticSayHi(){ System.out.println("我是接口中的静态成员方法") // 接口中的静态成员方法 } public default void defaultSayHi(){ System.out.println("我是接口中的默认成员方法") // 接口中的默认成员方法 }}class InterAImp implements InterA{ public void sayHi(){ System.out.println("我是重写之后的接口中的抽象方法"); // 强制重写 } public void defaultSayHi(){ InterA.super.defaultSayHi(); // 可以直接用interA.super.直接调用在实现类中 System.out.println("我是重写之后的接口的默认成员方法") // 接口中的默认成员方法重写 }}
阅读全文
0 0
- Java 抽象类,抽象方法和接口
- Java抽象类和抽象方法、接口
- Java接口和抽象类
- java接口和抽象类
- java 接口和抽象类
- java接口和抽象类
- JAVA抽象类和接口
- java抽象类和接口
- java抽象类和接口
- Java:抽象类和接口
- java接口和抽象类
- Java 抽象类和接口
- JAVA抽象类和接口
- java抽象类和接口
- java接口和抽象类
- JAVA抽象类和接口
- Java抽象类和接口
- java 抽象类和接口
- js选择文件进行导入(FileSaver.js)
- Kafka
- 剑指offer---二叉搜索树的后序遍历序列
- Unity3d中获取手机中的摄像头
- 数据结构实验之查找四:二分查找
- JAVA 抽象类 和 接口
- 3D-Coat(3D数字雕塑软件)官方中文破解版V4.8.06下载 | 3d coat破解版
- HBase 初学HBase的几个问题
- 模拟QQ聊天——采用TCP协议的C/S架构实现
- 小东吖 之 java 抽象类和接口
- Qt配置opencv
- Linux系统之nfs文件共享
- 解决FileDownloader库中无全部开始下载任务接口的问题
- 5.2 二叉树的链式存储实验