java中的抽象类和抽象方法

简介: abstract修饰抽象类和抽象方法。   包含抽象方法的类只能定义成抽象类,但是抽象类中可以没有抽象方法。   抽象方法没有方法体。只能由子类提供实现(重写)。   抽象类只能被继承,final修饰的类不能被继承,所以abstract和final不能共存。

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可以直接调用上面的方法,无需强制类型转换成其子类的类型。

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

目录
相关文章
|
6天前
|
Java
Java——方法的引用
方法引用允许将已有方法作为函数式接口的实现。使用“::”符号,需具备函数式接口,被引用的方法须存在且参数和返回值需与抽象方法一致。其分类包括:静态方法引用(类::方法名)、成员方法引用(对象::方法名、this::方法名、super::方法名)和构造方法引用(类名::new)。方法引用提高了代码的简洁性和可读性,减少了样板代码。
24 13
Java——方法的引用
|
2天前
|
Java
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
本文介绍了Java中抽象类和抽象方法的使用,以及ArrayList的基本操作,包括添加、获取、删除元素和判断列表是否为空。
9 2
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
|
12天前
|
Java
Java——抽象类和接口
抽象类是一种不能被实例化的类,至少包含一个抽象方法(无实现体的方法),常用于定义一组相关类的共同特征,并强制子类实现特定方法。抽象方法不能被 `static` 或 `final` 修饰,且必须被重写。 接口则是一个完全抽象的类,用于规范类的行为。接口使用 `interface` 关键字定义,不能实例化,并且类与接口之间是实现关系。 内部类是在一个类内定义的类,分为成员内部类、静态内部类、局部内部类和匿名内部类。成员内部类可被修饰符修饰,静态内部类只能访问外部类的静态成员,局部内部类定义在方法内,匿名内部类则隐藏了名字,直接通过 `new` 关键字定义并实现接口或继承类。
13 5
Java——抽象类和接口
|
6天前
|
Java API
Java方法的优缺点
Java 方法是编程的基本构建块,具有代码重用性、模块化、易于调试、增强可读性、支持重载和可变参数、封装性及静态与实例方法的灵活性等优点,但也存在性能开销、过度抽象、限制使用环境、参数传递开销、命名冲突和堆栈溢出等缺点。合理设计方法可确保代码高效且易维护。
|
2天前
|
安全 Java
java调用方法
java调用方法
15 4
|
6天前
|
Java
Java的方法详解
在 Java 中,方法是执行特定任务的代码块,包括定义、参数传递、返回值处理及重载等功能。
|
15天前
|
Java
Java的方法详解
Java的方法是类中的重要组成部分,用于定义类的行为。方法可以接收参数、执行操作并返回结果。其基本语法包括返回类型、方法名、参数列表和方法体。方法支持重载,即同名但参数不同的多个方法;静态方法则直接通过类名调用,无需实例化。此外,Java还支持可变参数,允许方法接收不定数量的参数。通过访问修饰符如`public`、`protected`、`private`,可以控制方法的可见性。方法是实现类功能的基本单元,增强了程序的灵活性和复用性。
|
23天前
|
存储 Java 程序员
优化Java多线程应用:是创建Thread对象直接调用start()方法?还是用个变量调用?
这篇文章探讨了Java中两种创建和启动线程的方法,并分析了它们的区别。作者建议直接调用 `Thread` 对象的 `start()` 方法,而非保持强引用,以避免内存泄漏、简化线程生命周期管理,并减少不必要的线程控制。文章详细解释了这种方法在使用 `ThreadLocal` 时的优势,并提供了代码示例。作者洛小豆,文章来源于稀土掘金。
|
2天前
|
Java 索引
java基础扫盲-String类常用的方法
java基础扫盲-String类常用的方法
|
13天前
|
JavaScript 前端开发 Java
通过JUnit5访问Java静态、私有、保护变量和方法
在《通过Gtest访问C++静态、私有、保护变量和方法》一文中介绍了如何通过Gtest访问C++静态、私有、保护变量和方法,本文介绍如何通过Junit5访问Java静态、私有、保护变量和方法。
14 0