首页 > 其他分享 >2.3. 接口与抽象类

2.3. 接口与抽象类

时间:2023-05-29 23:02:55浏览次数:64  
标签:实现 接口 radius 2.3 抽象类 方法 class

接口和抽象类是 Java 中两种实现抽象和多态的方法。它们之间有一些区别,但也有一些相似之处。这一节我们将通过详细的例子来更深入地了解接口和抽象类。

2.3.1. 接口

接口可以定义一组方法签名,但不能包含方法的实现。一个类可以实现多个接口,实现接口的类必须实现接口中定义的所有方法。

定义接口:

interface InterfaceName {
    ReturnType methodName(Parameters);
}

实现接口:

class ClassName implements InterfaceName {
    // 实现接口中的所有方法
}

示例1:接口

interface Drawable {
    void draw();
}

class Circle implements Drawable {
    double radius;

    @Override
    public void draw() {
        System.out.println("Drawing a circle with radius " + radius);
    }
}

class Square implements Drawable {
    double sideLength;

    @Override
    public void draw() {
        System.out.println("Drawing a square with side length " + sideLength);
    }
}

class Main {
    public static void main(String[] args) {
        Circle circle = new Circle();
        circle.radius = 5;
        circle.draw(); // 实现接口的方法

        Square square = new Square();
        square.sideLength = 4;
        square.draw(); // 实现接口的方法
    }
}

接口还可以具有默认方法和静态方法,这些方法可以包含实现。

interface InterfaceName {
    default ReturnType defaultMethodName(Parameters) {
        // 默认方法的实现
    }

    static ReturnType staticMethodName(Parameters) {
        // 静态方法的实现
    }
}

2.3.2. 抽象类

抽象类可以包含抽象方法(没有实现的方法)和具体方法。子类必须实现抽象类中的所有抽象方法。一个类只能继承一个抽象类。

定义抽象类:

abstract class AbstractClassName {
    abstract ReturnType methodName(Parameters);

    ReturnType methodName(Parameters) {
        // 具体方法的实现
    }
}

继承抽象类:

class ClassName extends AbstractClassName {
    // 实现抽象类中的所有抽象方法
}

示例2:抽象类

abstract class Shape {
    abstract double getArea();

    void printArea() {
        System.out.println("The area is " + getArea());
    }
}

class Circle extends Shape {
    double radius;

    @Override
    double getArea() {
        return Math.PI * radius * radius;
    }
}

class Square extends Shape {
    double sideLength;

    @Override
    double getArea() {
        return sideLength * sideLength;
    }
}

class Main {
    public static void main(String[] args) {
        Circle circle = new Circle();
        circle.radius = 5;
        circle.printArea(); // 继承自抽象类的具体方法

        Square square = new Square();
        square.sideLength = 4;
        square.printArea(); // 继承自抽象类的具体方法
    }
}

2.3.3. 接口与抽象类的区别

  1. 一个类可以实现多个接口,但只能继承一个抽象类。
  2. 接口中的方法默认是 public,不能有其他访问修饰符。抽象类中的方法可以有不同的访问修饰符。
  3. 接口不能包含实例变量(成员变量),只能声明静态常量。抽象类可以包含实例变量。
  4. 接口支持默认方法和静态方法,抽象类不支持默认方法。

2.3.4. 何时使用接口和抽象类?

  • 当你想要定义一组相关对象应该实现的方法,但不关心具体的实现时,使用接口。
  • 当你想要为一组相关对象提供共享的实现和行为时,使用抽象类。
  • 如果需要实现多个不同的行为组合,使用接口。因为 Java 不支持多继承,所以不能继承多个抽象类,但可以实现多个接口。

2.3.5. 小结

通过本节的学习,我们了解了接口和抽象类的概念以及它们之间的区别。接口和抽象类都可以实现抽象和多态,选择使用哪个取决于具体的需求和设计。

我们学习了如何定义接口和抽象类,如何使用它们来实现多态,并通过具体的例子加深了对这两个概念的理解。

在实际开发中,根据具体的应用场景和需求,合理地使用接口和抽象类,可以帮助我们设计出更加灵活、可扩展和易于维护的代码。

file

file

参考文章:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

标签:实现,接口,radius,2.3,抽象类,方法,class
From: https://blog.51cto.com/u_14241752/6374592

相关文章

  • 接口、定时、异步
    1远程接口1.1URL与HttpUrlConnection//接口路径Stringpath="";//创建URLURLurl=newURL(path);//连接HttpURLConnectionurlConnection=(HttpURLConnection)url.openConnection();//开始连接urlConnection.connect();//获取字节流......
  • 【Java】你真的了解抽象类和接口?
    一、抽象类在Java中,一个类如果被abstract修饰称为抽象类,抽象类中被abstract修饰的方法称为抽象方法**,抽象方法不用给出具体的实现体**。publicclassTestDemo{publicstaticvoidmain(String[]args){Circlec=newCircle();c.setR(5);c.......
  • 为什么我们需要API接口?API接口的核心又是什么?
    ​    API(ApplicationProgrammingInterface)是一种连接不同软件之间的标准化的接口,可以让不同软件间进行数据交互和通信。API接口的作用很多,以下是几个主要的原因:1.提高软件系统的灵活性和可扩展性。API接口可以将不同的模块分离开来,使得系统更加模块化,便于后续的扩展......
  • 接口注意事项
          ......
  • 从JDK.8开始接口新增的方法
        ......
  • 接口:综合案例
    packagecom.Demo4;publicclassTest{publicstaticvoidmain(String[]args){//目标:完成学生信息管理的实例ClassManageclassManage=newClassManage();classManage.printInfo();classManage.printScore();}}package......
  • vm -版本 16.2.3 - 将win10 指定磁盘文件夹挂载为linux【centOS 7】的共享磁盘
    1.vm配置win10磁盘指定文件夹为共享文件夹, 16.2.3版本不需要安装vm-tools 2.在linux开启共享文件夹执行指令sudovmhgfs-fuse.host://mnt/hgfs-osubtype=vmhgfs-fuse,allow_other如果报错这是因为 /mnt/hgfs 文件夹已经存在不需要理会,已经开启共享了在  /......
  • 接口
        ......
  • mysql、sqlserver、oracle分页,java分页统一接口实现
    定义:pageStart起始页,pageEnd终止页,pageSize页面容量oracle分页:rownum numfrom(实际传的SQL)where rownum<=pageEnd)wherenum>=pageStartsqlServer分页:           select*from(select top 页面容量from(select top字段Adesc)astemptable2orderb......
  • 关于模板方法设计:抽象类
       ......