Java:抽象类和接口(1)

一 抽象类

1.什么是抽象类

在 Java SE 中,抽象类是一种用于为其他类提供通用行为的类。它允许你定义一组方法和字段,而具体的实现留给子类来完成。抽象类不能被实例化,必须通过继承它的子类来实现其抽象方法并进行实例化。

java 复制代码
public abstract class Shape {

    public abstract void draw();

}
public class Cycle extends Shape{
    public void draw(){
        System.out.println("画一个圆。。。。。。。");
    }
}
public class Flower extends Shape{
    public void draw(){
        System.out.println("画一朵花.。。。。。。。");
    }
}
public class Test {
    public static void main(String[] args) {
        Cycle cycle=new Cycle();
        Flower flower =new Flower();
        Shape[] shapes={cycle,flower,cycle,cycle,flower};
        for (Shape s:shapes) {
            s.draw();
        }

       // Shape shape=new Shape();

        //Shape shape=new Cycle();
    }

}

2.抽象类的定义

使用 abstract 关键字定义一个类为抽象类。抽象类可以包含抽象方法(没有方法体的方法)和非抽象方法(普通方法),但它们不能直接被实例化。

java 复制代码
public abstract class Shape {
java 复制代码
abstract class Shape {
    // 抽象方法(没有方法体)
    public abstract void draw();

    // 具体方法(有实现)
    public void move() {
        System.out.println("Moving the shape");
    }
}

3.抽象方法

抽象方法只有方法的签名,没有具体的实现。它们在抽象类中声明,但必须由子类提供实现。

java 复制代码
父类的抽象方法
public abstract class Shape {

    public abstract void draw();

}
在子类中具体实现
public class Cycle extends Shape{
    public void draw(){
        System.out.println("画一个圆。。。。。。。");
    }
}
public class Flower extends Shape{
    public void draw(){
        System.out.println("画一朵花.。。。。。。。");
    }
}
抽象方法的特点
  • 抽象方法必须在抽象类中声明。
  • 子类必须实现所有的抽象方法,除非子类本身也是抽象类。
  • 抽象方法不能有方法体(没有大括号和具体的实现代码)。

注:如果子类也是抽象方法,则在子类的子类中实现,欠下的总是要还的。

java 复制代码
public abstract class Shape {

    public abstract void draw();

}


abstract class A extends Shape{
    public abstract void drink();
}

 class B extends A{
    public void draw(){
        System.out.println("画画");
    }
    public void drink(){
        System.out.println("喝水");
    }
}

4. 抽象类的特点

  • 不能实例化 :抽象类不能直接创建对象。例如,Shape shape = new Shape(); 是不合法的,因为抽象类无法实例化。
  • 可以包含具体方法:抽象类不仅可以包含抽象方法,还可以包含具体方法,即有实现的方法。
  • 可以包含字段:抽象类可以像普通类一样包含成员变量(字段)。
  • 可以有构造器:尽管抽象类不能被实例化,但它可以有构造器,供子类调用。

注:抽象类可以有抽象方法和普通方法,但是普通类只能有普通方法不能有抽象方法。

总结:

  1. 如果一个类中有抽象方法,那么这个类必定是抽象类
  2. 抽象类的抽象方法可以没有具体实现,在子类中实现
  3. 抽象类的出现就是为了被继承的
  4. 抽象类不能被实例化,它的目的是为其他类提供基础和模板。
  5. 抽象类可以包含字段、构造器、具体方法等元素,使得它比接口更灵活。

希望能对大家有所帮助!!!!!

相关推荐
cj63411815026 分钟前
【MySQL】mysqldump使用方法
java·后端
JIngJaneIL28 分钟前
停车场管理|停车预约管理|基于Springboot的停车场管理系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·停车场管理系统
lly20240629 分钟前
ASP Folder:深入解析其功能与使用技巧
开发语言
杰克尼1 小时前
二分查找为什么总是写错
java·数据结构·算法
雪域迷影1 小时前
Go语言中通过get请求获取api.open-meteo.com网站的天气数据
开发语言·后端·http·golang·get
半旧夜夏3 小时前
【分布式缓存】Redis持久化和集群部署攻略
java·运维·redis·分布式·缓存
短视频矩阵源码定制3 小时前
矩阵系统源码推荐:技术架构与功能完备性深度解析
java·人工智能·矩阵·架构
ysdysyn3 小时前
C# 进程管理实战:检查与启动EXE程序的完整指南
开发语言·c#
Eiceblue3 小时前
使用 Java 将 Excel 工作表转换为 CSV 格式
java·intellij-idea·excel·myeclipse
漂流幻境3 小时前
IntelliJ IDEA的Terminal中执行ping命令时遇到的“No route to host“问题
java·ide·intellij-idea