当前位置: 首页 > news >正文

Java:抽象类和接口(1)

一 抽象类

1.什么是抽象类

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

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 关键字定义一个类为抽象类。抽象类可以包含抽象方法(没有方法体的方法)和非抽象方法(普通方法),但它们不能直接被实例化。

public abstract class Shape {
abstract class Shape {// 抽象方法(没有方法体)public abstract void draw();// 具体方法(有实现)public void move() {System.out.println("Moving the shape");}
}

3.抽象方法

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

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

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

 

 

 

 


http://www.mrgr.cn/news/28102.html

相关文章:

  • Android音视频直播低延迟探究之:WLAN低延迟模式
  • Springboot校园失物招领平台
  • 基本数据类型:Kotlin、Dart (Flutter)、Java 和 C++ 的比较
  • 【ChatGPT】让ChatGPT生成批判性思维问题的回答
  • 科技云报到:数字化转型,从不确定性到确定性的关键路径
  • Rust开发一个命令行工具(一,简单版持续更新)
  • 联合条件概率 以及在语言模型中的应用
  • 基于spring的ssm整合
  • CPLEX+Yalmip+MATLAB2022a配置
  • .sln文件是什么文件?
  • Python--解决安装 fasttext 库出现的异常
  • 语言的枚举
  • 华为OD机试真题-观看文艺汇演问题-2024年OD统一考试(E卷)
  • Float类型的有效位数有几位
  • Kullback–Leibler divergence讲解
  • 拥有一个你说了算的人生—觉知
  • 柳淘鸿黄金沁透发热面膜:肌肤逆龄之旅的秘密武器!
  • Linux-进程优先级
  • 02 信念·组织力·战略 - 目标管理
  • AJAX 入门 day3
  • Pytorch详解-Pytorch核心模块
  • Mixtral 8x7B:开源稀疏混合专家模型的新里程碑
  • django实现开发、测试、生产环境配置区分
  • 不容错过!【寻找散落的Mar力】活动,赢取RTX4090金条超值大奖!
  • HashMap 详解
  • python-素数中的等差数列