6. 抽象类和接口

news/2024/7/5 21:03:22

1. 抽象类

当我们的方法没有具体的实现,那么这个时候我们可以将这个方法定义为抽象方法,把定义这个方法的类定义为抽象类.

//抽象类
public abstract class Shape {
    public int a;
    public static int b ;
    public void func() {
        
    }
    //抽象方法
    abstract public void draw();

}
  1. 使用 abstract 修饰的方法,叫做抽象方法.
  2. 包含抽象方法的类必须设计为抽象类
  3. 抽象类不能够进行实例化
    Shape shape = new Shape( );
  4. 抽象类当中,可以有和普通类一样的方法,成员.
    和普通类不一样的是,抽象类不可以进行实例化.
  5. 抽象类不可以被实例化, 但是可以被继承.
  6. 当一个普通类继承了抽象类,那么这个普通类就要重写抽象类当中的所以方法,除非把这个普通类也加 abstract 变成抽象类

2. 接口

2.1 接口的概念

生活当中的接口比比皆是,手机充电口,插头接口…

接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。
在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型

public interface 接口名称{
// 抽象方法
public abstract void method1(); // public abstract 是固定搭配,可以不写
public void method2();
abstract void method3();
void method4();
// 注意:在接口中上述写法都是抽象方法,更推荐方式4,代码更简洁
}

2.3 接口使用

接口不能直接使用 , 必须要有一个"实现类"来"实现"该接口,实现接口中的所有抽象方法。

public class 类名称 implements 接口名称{
// ...
}

注意

  1. 子类和父类之间是extends 继承关系
  2. 类与接口之间是 implements 实现关系

实例:

请实现笔记本电脑使用USB鼠标、USB键盘的例子

  1. USB接口:包含打开设备、关闭设备功能
  2. 笔记本类:包含开机功能、关机功能、使用USB设备功能
  3. 鼠标类:实现USB接口,并具备点击功能
  4. 键盘类:实现USB接口,并具备输入功能

public interface USB {
    void openDevice();
    void closeDevice();
}

public class KeyBoard implements USB{
    @Override
    public void openDevice() {
        System.out.println("打开键盘");
    }

    @Override
    public void closeDevice() {
        System.out.println("关闭键盘");
    }

    public void inPut() {
        System.out.println("键盘输入");
    }
}

public class Mouse implements USB{
    @Override
    public void openDevice() {
        System.out.println("打开鼠标!");
    }

    @Override
    public void closeDevice() {
        System.out.println("关闭鼠标!");
    }

    public void click() {
        System.out.println("鼠标点击");
    }
}

public class Computer {
    public void powerOn() {
        System.out.println("打开笔记本电脑");
    }
    public void powerOff() {
        System.out.println("关闭笔记本电脑");
    }

    public void useDevice(USB usb) {
        usb.openDevice();
        if (usb instanceof Mouse) {
            Mouse mouse = (Mouse) usb;
            mouse.click();
        }else if(usb instanceof KeyBoard) {
            KeyBoard keyBoard = (KeyBoard) usb;
            keyBoard.inPut();
        }
        usb.closeDevice();
    }
}

public class Test {
    public static void main(String[] args) {
        Computer computer = new Computer();
        computer.powerOn();

        computer.useDevice(new Mouse());

        computer.useDevice(new KeyBoard());

        computer.powerOff();
    }
}



http://www.niftyadmin.cn/n/3032407.html

相关文章

jsp到servletURL编码问题

在servlet中获取的jsp表单内容 java.net.URLDecoder.decode(body,"UTF-8");用这个方法进行编码就能获取到中文字符了.转载于:https://www.cnblogs.com/wysAC666/p/10361286.html

Netty02——核心功能与线程模型精练

目录 一、Netty初探 1.1、Netty的使用场景: 二、Netty线程模型 三、Netty模块组件 四、Netty通讯示例 五、ByteBuf详解 六、Netty实战聊天室系统 一、Netty初探 NIO 的类库和 API 繁杂, 使用麻烦: 需要熟练掌握Selector、 ServerSock…

轻量级流程图控件GoJS最新版本v2.1.42发布,十项功能修复 | 附下载

GoJS是一款功能强大,快速且轻量级的流程图控件,可帮助你在JavaScript 和HTML5 Canvas程序中创建流程图,且极大地简化您的JavaScript / Canvas 程序。 点击下载GoJS最新版 如果您对该图表控件感兴趣,欢迎加入图表控件QQ交流群&…

移动互联网服务客户端开发技巧系列

基于网络的客户端开发技巧——第一篇http://www.1000phone.net/thread-8058-1-1.html基于网络的客户端开发技巧——第二篇Webview及正则http://www.1000phone.net/thread-8061-1-1.html基于网络的客户端开发技巧——第三篇上下拖动切换页面http://www.1000phone.net/thread-806…

TeeChart for .NET图表控件如何图例控制

TeeChart for .NET是优秀的工业4.0 WinForm图表控件,官方独家授权汉化,集功能全面、性能稳定、价格实惠等优势于一体。TeeChart for .NET 中文版还可让您在使用和学习上没有任何语言障碍,至少可以节省30%的开发时间。 点击立即下载最新版Tee…

使用openssl模拟CA和CA证书的签发

使用openssl模拟CA和CA证书的签发 当使用ssl/tls进行加密通信时,必须要有数字证书。若通信只限制在局域网内,可以不向第三方机构申请签发证书,可以通过openssl模拟CA(Certificate Authority),并通过该CA签发证书。下文讲述在Cento…

一个Tahoma字体bug引发的思考—关于样式bug的分析流程

这是一篇分析流文章,不是技术流。问题:我们经常会碰到很多莫名其妙的样式bug,也许10个浏览器下,9个浏览器是好的。但是就有一个浏览器有问题。很多情况下,ie6/7出bug的几率比较大,当然解决办法也是很多&…

判断素数(三种方法)

方法一 /*** 判断素数(方法一)* param args*/public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();int i 2;for (; i < n; i) {if (n % i 0) {System.out.println(n " 不是素数~");break;}} // …