• Java--多态及抽象类与接口


    1.多态

            以不同参数调用父类方法,可以得到不同的处理,子类中无需定义相同功能的方法,避免了重复代码编写,只需要实例化一个继承父类的子类对象,即可调用相应的方法,而只需要维护附父类方法即可。

    1. package classExtends;
    2. public class Quadrangle { //定义四边形类
    3. private Quadrangle[] qtest = new Quadrangle[6];
    4. private int nextIndex = 0;
    5. public void draw(Quadrangle q) {
    6. System.out.println(qtest.length);
    7. if (nextIndex < qtest.length) {
    8. qtest[nextIndex] = q;
    9. System.out.println(nextIndex);
    10. nextIndex++;
    11. }
    12. }
    13. public static void main(String[] args) {
    14. Quadrangle q = new Quadrangle(); //实例化四边形Quadrangle对象,用于调用draw()方法
    15. q.draw(new Square()); //以Square正方形对象为参数调用draw()方法
    16. q.draw(new Paralllelogram()); //以Paralllelogram对象为参数调用draw()方法
    17. }
    18. }
    19. class Square extends Quadrangle { //定义正方形
    20. public Square() {
    21. System.out.println("正方形");
    22. }
    23. }
    24. class Paralllelogram extends Quadrangle { //定义平行四边形
    25. public Paralllelogram() {
    26. System.out.println("平行四边形");
    27. }
    28. }
    29. 输出:
    30. 正方形
    31. 6
    32. 0
    33. 平行四边形
    34. 6
    35. 1

    2.抽象类

            2.1 关键字:abstract

            一般将父类定义为抽象类,使用这个父类进行集成和多态处理;使用abstract关键字定义的类是抽象类,使用abstract关键字定义的方法是抽象方法;抽象类除了被继承外,无任何其他意义。

            2.2 抽象类不可以实例化对象。

            2.3 抽象方法没有方法体。

            2.4 抽象类被继承后需要实现其中所有的抽象方法。

                    也就是保证以相同的方法名称,参数列表,相同的返回值类型创建出非抽象方法。

            语法:

    public abstract class Test{                //定义抽象类

            abstract void testAbstract();        //定义抽象方法

    }

    3.接口

    3.1 接口简介

            接口就是抽象类的延伸,可以将接口看做纯粹的抽象类。

    3.2 接口特点:

            3.2.1 接口也是一种抽象类,不可以实例化对象。

            3.2.2 接口中所有的方法没有方法体,且需要在其他类中被重写覆盖实现。

            3.2.3 接口中所有的方法都没有方法体。

            3.2.4 使用关键字【interface】进行定义。

            语法:

    public interface drawTest{

            void draw();

    }

    1.public: 接口可以像类一样被权限修饰符修饰,但public关键字仅限于接口在与其同名的文件中被定义。

    2.interface:定义接口关键字。

    3.drawTest:接口名称。

            3.2.5 一个类实现接口时使用关键字【implements】.

            语法:

    public class Parallelogram extends Quadrangle implements drawTest{

            ....//

    }

            3.2.6 接口中,方法必须被定义为publicabstract

            2.3.7 接口中定义的任何字段都自动是【static】和【final】的。

            2.3.8 一个类可以实现多个接口

    class 类名 implemets 接口1,接口2,接口3....接口n{

            //.......

    }

    1. package classExtends;
    2. interface drawTest { //定义接口
    3. public void draw(); //定义方法
    4. }
    5. //定义平行四边形类,继承四边形类,并实现接口drawTest
    6. class ParallelogramgleUseInterface extends QuadrangleUseInterface implements drawTest {
    7. public void draw() { //由于本类实现了接口drawTest,所以需要重写覆盖draw()方法
    8. System.out.println("平行四边形.draw()");
    9. }
    10. public void doAnything() { //重写覆盖父类方法
    11. //someSentence;
    12. }
    13. }
    14. class SquareUseInterface extends QuadrangleUseInterface implements drawTest {
    15. public void draw() {
    16. System.out.println("正方形.draw()");
    17. }
    18. public void doAnything() { //重写覆盖父类方法
    19. //someSentence;
    20. }
    21. }
    22. public class QuadrangleUseInterface { //定义四边形类
    23. public void doAnything() {
    24. //someSentence;
    25. }
    26. public static void main(String[] args) {
    27. drawTest[] d = {new ParallelogramgleUseInterface(), new SquareUseInterface()}; //接口也可以进行向上转型操作
    28. for (int i = 0; i < d.length; i++) {
    29. d[i].draw(); //调用draw()方法
    30. }
    31. }
    32. }
    33. 输出:
    34. 平行四边形.draw()
    35. 正方形.draw()

  • 相关阅读:
    架构师范文(AI写作)两篇
    C. Discrete Acceleration(浮点二分)
    jQuery 安装
    Cilium系列-14-Cilium NetworkPolicy 简介
    Netty基础入门和基本使用
    智慧城市驿站:智慧公厕升级版,打造现代化城市生活的便捷配套
    linux系统安全配置命令详解
    C++ 内存管理 - primitives - 侯捷
    ISP算法----AWB总结及源代码
    【测试与自动化】介绍-框架-Jest-覆盖率-异步代码-e2e-Vue测试
  • 原文地址:https://blog.csdn.net/qq_40132294/article/details/133906602