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. 抽象类可以包含字段、构造器、具体方法等元素,使得它比接口更灵活。

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

相关推荐
lly202406几秒前
Web 品质样式表
开发语言
Wang's Blog几秒前
Nodejs-HardCore: 模块管理与I/O操作详解
开发语言·nodejs
强子感冒了几秒前
Java List学习笔记:ArrayList与LinkedList的实现源码分析
java·笔记·学习
微爱帮监所写信寄信1 分钟前
微爱帮监狱寄信写信小程序PHP底层优化框架
java·开发语言·数据库·spring·微信·php·mybatis
琥珀.2 分钟前
查看linux下java服务进程是否正常
java·linux·运维
lly2024064 分钟前
R 语言注释指南
开发语言
Coder_Boy_9 分钟前
基于SpringAI企业级智能教学考试平台核心模块协同总结与最佳实践方案
java·大数据·人工智能
崎岖Qiu10 分钟前
【设计模式笔记23】:长文解析-深刻理解「装饰器模式」
java·笔记·设计模式·装饰器模式
bigHead-10 分钟前
前端双屏显示与通信
开发语言·前端·javascript