一、什么是抽象类和抽象方法

没有具体功能的实现,通过子类继承后重写方法来实现一定约束的类称之为抽象类,抽象类必须被abstract修饰。抽象方法就是只有方法声明,没有方法体的方法。抽象类的使用一般通过继承来实现

二、为什么需要抽象类和抽象方法

引用抽象方法和抽象类,是java提供的一种语法工具,引导使用者正确的使用它们,减少误用。相当于对子类进行一定限制。

三、抽象类和抽象方法的语法规则及其注意事项

抽象类抽象方法必须被abstract修饰。

抽象类中可以有普通方法,但是有抽象方法的类必须是抽象类。抽象类中的普通方法因为不能被创建对象,所以不能使用这个普通方法。

抽象类除了不能实例化对象之外,类的其它功能依然存在。

抽象方法中可以有被static修饰main方法,并且可以执行。

一个类在继承抽象类后,必须实现抽象类中定义的所有抽象方法。除非它自己也声明为抽象类。

抽象方法名后面直接跟一个分号,而不是花括号。

四、抽象类和抽象方法的实现案例

1、抽象类中可以有普通方法,但是有抽象方法的类必须是抽象类。

public abstract class Demo01 {

public abstract void run();

public void test(){}

}

//编译通过,不报错

public class Demo01 {

public abstract void run();

public void test(){}

}

//报错:

Class 'Demo01' must either be declared abstract or implement abstract method 'run()' in 'Demo01'

Abstract method in non-abstract class

2、抽象类除了不能实例化对象

public abstract class Demo01 {

public abstract void run();

public static void main(String[] args) {

Demo01 demo01=new Demo01();

}

}

3、抽象方法中可以有被static修饰main方法,并且可以执行。

public abstract class Demo01 {

public abstract void run();

public static void main(String[] args) {

System.out.println("抽象类中的main方法");

}

}

//输出结果:抽象类中的main方法

4、抽象类的使用一般通继承来实现,且子类中要么对抽象类的方法进行重写,要么声明子类也为抽象类

public class Demo02 extends Demo01{

@Override

public void run() {

}

}

abstract class Demo03 extends Demo01{

}

//Demo02和Demo3均能编译通过。

5、抽象类中的静态方法可以用类名.方法名的方式调用

6、抽象的实例:

有抽象类Father,和抽象方法run()。

public abstract class Father {

private String name;

private int age;

private char sex='男';

public int money=100_000;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public char getSex() {

return sex;

}

public void setSex(char sex) {

this.sex = sex;

}

abstract void run();

public void say(){

System.out.println("这是父类普通方法");

}

public static void go(){

System.out.println("这是父类静态方法");

}

}

有子类Son继承了抽象类,重写了父类的抽象方法run

public class Son extends Father{

private double salary;

@Override

void run() {

System.out.println("子类重写了父类的方法run");

System.out.println(super.getSex());

super.say();

}

public static void main(String[] args) {

Son son=new Son();

son.run();

System.out.println(son.getSex());

//System.out.println(super.getSex()); //错误

son.setAge(47);

System.out.println(son.getAge());

son.setName("ThreePure");

System.out.println(son.getName());

//调用父类的公有属性

System.out.println(son.money);

//使用继承于父类的方法

son.say();

}

}

运行结果:

子类重写了父类的方法run

这是父类普通方法

47

ThreePure

100000

这是父类普通方法

尽管我们不能实例化一个 Father类的对象,但是如果我们实例化一个 Son 类对象,该对象将从 Father 类继承 成员方法,且通过该方法可以设置或获取成员变量。

五、抽象类的其他补充吗

抽象类是否有构造器:

从图中我们可以知道抽象类也是有构造器的,并别在子类创建对象时被调用。

public abstract class Demo3 {

public Demo3() {

System.out.println("抽象类的构造方法");

}

}

public class Demo4 extends Demo3{

public static void main(String[] args) {

Demo4 demo4 =new Demo4();

}

}

//抽象类的构造方法

2、final与abstract的矛盾

final关键字可以修饰类、方法、变量。final修饰的类不能被派生;final修饰的方法,禁止子类重写。所以我们可以看出,final和abstract不能一起使用。

3、构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。

java抽象方法声明_java抽象类和抽象方法相关推荐

  1. java类和抽象方法课件_java抽象类和抽象方法(转载)

    抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类.抽象类有点类似"模板"的作用,目的是根据其格式来创建和修改新的类.对象不能由 抽象类直接创建,只可以通过抽象类派 ...

  2. java抽象方法实例_Java 抽象类和抽象方法实例

    Linux参考文章 定义 Shape 类表示一般二维图形.Shape 具有抽象方法 area 和 perimeter,分别计算形状的面积和周长.试定义一些二维形状类(如矩形.三角形.圆形等),这些均为 ...

  3. java 定义抽象变量_Java抽象类和抽象方法定义与用法实例详解

    本文实例讲述了Java抽象类和抽象方法定义与用法.分享给大家供大家参考,具体如下: 一.Java抽象类 1.抽象类的说明 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都 ...

  4. java抽象类的实现_JAVA抽象类和抽象方法(abstract)

    一.抽象(abstract)的使用 当父类的某些方法不确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]. 我们都知道,父类是将子类所共同拥有的属性和 ...

  5. java 如何判断抽象类_JAVA抽象类和抽象方法(abstract)

    一.抽象(abstract)的使用 当父类的某些方法不确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]. 我们都知道,父类是将子类所共同拥有的属性和 ...

  6. java抽象类变量_Java抽象类

    一.解释: Java的普通类是一个完善的功能类,可以直接实例化对象,并且在普通类中可以包含有构造方法.普通方法.static方法.常量和变量等内容.而抽象类是指在普通类的结构里面增加抽象方法的组成部分 ...

  7. java main 声明_Java中main方面面试题

    1.不用main方法如何定义一个类? 不行,没有main方法我们不能运行Java类. 在Java 7之前,你可以通过使用静态初始化运行Java类.但是,从Java 7开始就行不通了. 2.main() ...

  8. java 计算体积_Java抽象类计算体积

    abstract class Geometr //定义抽象类,几何图形 { public abstract double getArea(); //抽象函数,得到底面积 } class Pillar ...

  9. java常量声明_java常量的声明使用定义等

    java常量的声明使用定义等.什么是java常量?java常量的命名规则是什么? 使用java常量的优点有哪些? java常量属于变量的特殊形式.在定义常量的时候要注意的问题: 常量要在定义时赋值 常 ...

最新文章

  1. android 系统的切图方式_UI设计切图规范
  2. 统计学中的协方差矩阵(阵列信号基础)
  3. Paper:《Adam: A Method for Stochastic Optimization》的翻译与解读
  4. Adaboost(自适应提升树)算法原理
  5. matlab实现盖尔圆,[理学]数值分析习题解答.doc
  6. 【系列7】使用Dockerfile创建带mysql的Centos Docker镜像
  7. oracle事务默认自动提交吗_干货|事务
  8. How To Read C Declarations
  9. MyBatis源码阅读(七) --- 查询结果集封装流程
  10. Ffmpeg常用转码命令
  11. 用Java检验统一社会信用代码是否为真
  12. awb数据怎么计算_AWB 介绍 原理 和算法
  13. 开篇 :直播软件分析.
  14. 如何用宏定义的方式实现MAX(A,B),MAX(A,B,C),MAX(A,B,C,D)
  15. directdraw(directdraw怎么开启)
  16. Kafka的版本号说明
  17. 深度学习——手写数字识别
  18. SDN(软件定义网络)数据平面
  19. 华环光端机MySQL_华环155M光端机 H9MO-LME-01T1642/EJ
  20. 华为机器学习服务活体检测再升级,构建安全友好的交互式体验

热门文章

  1. 线性规划模型--解决投资问题
  2. 王者荣耀角色信息在哪个服务器,怎么查询王者荣耀角色在哪个区
  3. Windows10 UEFI+GPT模式(解决更新显示UEFI布局问题)
  4. mysql 数据连续不走索引6_MySql组合索引最左侧原则失效
  5. 计算机诞生历史小故事
  6. 正则 以小写英文字母开头,且只能包含英文字母、数字、下划线
  7. [二级C]专题习题-二维数组
  8. 离线语音识别芯片对比
  9. ISAM error: no free disk space故障分析处理
  10. python查询缺失值所在位置使用scipy_在稀疏lil_matrix(Scipy / Python)中查找最大值及其索引...