zoukankan      html  css  js  c++  java
  • java中的抽象类和抽象方法

    abstract修饰抽象类和抽象方法。

      包含抽象方法的类只能定义成抽象类,但是抽象类中可以没有抽象方法。

      抽象方法没有方法体。只能由子类提供实现(重写)。

      抽象类只能被继承,final修饰的类不能被继承,所以abstract和final不能共存。

    抽象方法如下所示:

    public abstract class Sharp//抽象类
    {
      private String color; public abstract String getType();//抽象方法 public abstract double calPerimeter();
      {
        System.out.println("执行抽象类Sharp中的初始化块");
      }

      public Sharp()
      {}
      //Sharp的构造器,不是用于创建Sharp对象的,而是用于子类的调用
      public Sharp(String color)
      {
        System.out.println("Sharp类的构造器");
        this.color = color;
      }
    }

    在上面的代码中,这个抽象类包含了初始化块、构造器。

    下面定义一个三角形类,继承Sharp类,实现Sharp类中的抽象方法。

    public class Triangle extends Sharp
    {
      //定义三条边
      private double a,b,c;
      
      public Triangle(String color,double a,double b,double c)
      {
        super(color);
        this.a=a;
        this.b=b;
        this.c=c;
      }
      //重写Sharp类中计算周长的抽象方法
      public double calPerimeter()
      {
        return a+b+c;
      }
      //重写Sharp类中返回形状的抽象方法
      public String get Type()
      {
        return "三角形";
      }
    }

    假设还有个Circle类继承了Sharp类,那么如下代码:

    //测试类的main方法
    main()
    {
      Sharp s1 = new Triangle("黑色",2,3,4);
      Sharp s2 = new Circle("黄色",3);
      Syso(s1.getType());//多态
      Syso(s1.calPerimeter());

      Syso(s2.getType());
      Syso(s2.calPerimeter());
    }

    这段代码定义了2个Sharp类型的引用性变量,分别指向Triangle和Circle。s1和s2可以直接调用上面的方法,无需强制类型转换成其子类的类型。

    :利用抽象类和抽象方法可以充分发挥多态的优势,使用更加灵活。

  • 相关阅读:
    【网络与系统安全】20179209 利用metasploit对windows系统的渗透
    2017-2018-1 20179209《Linux内核原理与分析》第五周作业
    【网络与系统安全】20179209 木马的利用
    2017-2018-1 20179209《Linux内核原理与分析》第四周作业
    【网络与系统安全】20179209 wireshark和nmap实验
    2017-2018-1 20179209《Linux内核原理与分析》第三周作业
    20179209课后作业之od命令重写
    ORA-12505 错误解决
    linux_memcached_memcachedb
    linux_jvm_jmap_dump内存分析
  • 原文地址:https://www.cnblogs.com/lixiaolun/p/4319065.html
Copyright © 2011-2022 走看看