java 抽象与接口_java抽象类与接口

本文介绍了Java中的抽象类和接口。抽象类用于定义抽象方法,不能实例化,子类必须实现其所有抽象方法。接口则更为抽象,只能包含抽象方法和常量,一个类可以实现多个接口,而只能继承一个抽象类。接口可以实现多继承,增强了功能并降低了耦合性。通过实例展示了抽象类和接口的使用场景和区别。
摘要由CSDN通过智能技术生成

、抽象类:

抽象类定义 abstract:[public abstract class clas_name{ }(抽象类)]

抽象方法 abstract :[public abstract void/返回值类型 name();(抽象方法)注:没有方法体]

方法体: 方法{ 方法体 } 方法里面的内容就是方法体 (包括{ })

抽象类不能创建对象,因为没有意义

如果一个普通类继承了抽象类,就必须重写里面的所有抽象方法

有抽象方法的类一定是一个抽象类(一个抽象类不一定有抽象方法)

抽象类可以定义普通方法,但是该方法只能是继承本类的普通类去调用

abstract 不能和 private(矛盾) 、final(常量) 、 static 一起用

48304ba5e6f9fe08f3fa1abda7d326ab.png

packagecom.oracle.dome01;

//抽象类定义 abstract

//抽象类不能创建对象,因为没有意义

//如果一个普通类继承了抽象类,就必须重写里面的所有抽象方法

//有抽象方法的类一定是一个抽象类

//抽象类可以定义普通方法,但是该方法只能是继承本类的普通类去调用

public abstract classdeveloper {

//抽象方法(没有方法体)

public abstract voidwork();

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

packagecom.oracle.dome01;

public class andriod extendsdeveloper{

public voidwork(){

System.out.println("写安卓代码");

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

packagecom.oracle.dome01;

public class javaEE extendsdeveloper{

public voidwork(){

System.out.println("写javaEE代码");

}

public void work(int[] list){

}

public void work(double[] list){

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

建立测试类

48304ba5e6f9fe08f3fa1abda7d326ab.png

packagecom.oracle.dome01;

public classtest {

public static voidmain(String[] args) {

javaEE j = newjavaEE();

j.work();

andriod a = newandriod();

a.work();

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

效果如下:

cd1739006fa91ad4ef222496e08ec669.png

2、接口:(接口是功能的集合 可以看做是一种 数据类型)

(1)定义:接口定义时需要使用interface关键字[编译后仍然会产生.class文件]

(2)类实现接口:implement

(3)接口的多实现:解决多弊端的弊端

(4)类继承类同时实现接口 [接口中定义的事物的扩展功能,父类中定义的事物的基本功能]

(5)接口的多继承

(6)接口的思想 : 好处

1、接口的出现扩展了功能。

2、接口其实就是暴漏出来的规则。

3、接口的出现降低了耦合性,即设备与设备之间实现了解耦。

48304ba5e6f9fe08f3fa1abda7d326ab.png

packagecom.oracle.dome02;

//比抽象类更抽象的类:接口

//接口只能写抽象方法

//接口中定义的变量有固定修饰符 : public static final

//static : 可以直接用类名.成员

//final : 常量

public interfaceUsb {

int a = 1;

public abstract voidopen();

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

48304ba5e6f9fe08f3fa1abda7d326ab.png

packagecom.oracle.dome02;

//实现类:实现接口

public class mouse implementsUsb{

public voidopen(){

System.out.println("打开链接");

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

建立测试类:

48304ba5e6f9fe08f3fa1abda7d326ab.png

packagecom.oracle.dome02;

public classtest {

public static voidmain(String[] args) {

mouse m = newmouse();

m.open();

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

效果如下:

2a9d2e998b06edc6f2c13cbd9df66336.png

三、接口和抽象类的区别:

1.抽象类中可以有普通成员变量,接口中没有普通成员变量

2.抽象类可以有构造方法,接口中不能有构造方法

3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

4. 抽象类中可以包含静态方法,接口中不能包含静态方法

5. 抽象类中的抽象方法的访问类型可以是 public,protected ,

但接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型

6. 一个类可以实现多个接口,但只能继承一个抽象类。

7. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,

但接口中定义的变量只是public static final 类型,并且默认即为 public static final 类型。

四、应用:

48304ba5e6f9fe08f3fa1abda7d326ab.png

----------------------------------------------------------抽象类:犬

public abstract class犬{

public abstract void能吃();

public abstract void能叫();

}

-----------------------------------------------------------接口:缉毒功能

public interface缉毒{

public abstract void缉毒();

}

-------------------------------------------------------具体事物:缉毒犬

public class 缉毒犬 extends 犬 implements缉毒{

public void能叫(){};

public void能吃(){};

puclic void缉毒(){};

}

--------------------------------------------------------建立测试类 :

public classtest{

public static voidmain(String[] args){

缉毒犬 缉毒犬一号 = new缉毒犬();

缉毒犬一号.能吃();

缉毒犬一号.能叫();

缉毒犬一号.缉毒();

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值