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

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

相关推荐
Bubluu4 分钟前
浏览器点击视频裁剪当前帧,然后粘贴到页面
开发语言·javascript·音视频
Cosmoshhhyyy12 分钟前
LeetCode:3083. 字符串及其反转中是否存在同一子字符串(哈希 Java)
java·leetcode·哈希算法
AI人H哥会Java25 分钟前
【Spring】基于XML的Spring容器配置——<bean>标签与属性解析
java·开发语言·spring boot·后端·架构
开心工作室_kaic35 分钟前
springboot493基于java的美食信息推荐系统的设计与实现(论文+源码)_kaic
java·开发语言·美食
缺少动力的火车37 分钟前
Java前端基础—HTML
java·前端·html
析木不会编程42 分钟前
【C语言】动态内存管理:详解malloc和free函数
c语言·开发语言
loop lee1 小时前
Redis - Token & JWT 概念解析及双token实现分布式session存储实战
java·redis
ThetaarSofVenice1 小时前
能省一点是一点 - 享元模式(Flyweight Pattern)
java·设计模式·享元模式
InSighT__1 小时前
设计模式与游戏完美开发(2)
java·游戏·设计模式