前言:
当前兄弟们对“java实例化抽象类”大概比较关怀,大家都需要了解一些“java实例化抽象类”的相关文章。那么小编同时在网摘上收集了一些有关“java实例化抽象类””的相关资讯,希望大家能喜欢,各位老铁们一起来了解一下吧!Java 17 抽象类思维导图
抽象类:对于类来说都是事物的封装和提取, 但是一个事物的提取必须相对来说是通用的,因为通用才更具有父类的特征, 而通用的情况下可以更加的抽象, 而没有具体的描述。从实际使用的情况下来说抽象方法就是没有具体的行为, 就是方法的内容为空。既然没有方法具体的执行内容,从定义规则上来讲也就没有必须存在方法体了。 对于抽象类来说, 主要是因为继承的存在的, 也就是有子类能够实现抽象类才有了真正执行的意义。
比方说动物会叫, 这句话是没有问题的, 但是动物怎么叫, 什么动物, 没有具体的动物你是无法描述叫的这个行为的。有个叫猫的动物会喵喵叫。一起喵喵喵喵喵喵。咳咳咳。瞄~
对于一个吃货来说, 一个动物会吃, 也是同样的问题。 动物只能称为一个抽象。 具体的行为对于他本身来说没有意义。
如何定义抽象类呢?
[修饰符] abstract class 类名{ // 0 到 n 个抽象方法。 [修饰符] abstract 方法返回值 方法名(方法参数);}
先看一个简单的例子:
public abstract class Animal {}
抽象类可以可以直接定义而不需要定义任何的抽象方法。但是这样做通常没有意义。 继续看下面的例子。
// Animal.javapublic abstract class Animal { String name; public abstract void eat();}// Cat.javapublic class Cat extends Animal{ public Cat(){ super.name = "猫"; } @Override public void eat() { System.out.println(super.name + ", 正在吃鱼!"); }}// Test.javapublic class Test { public static void main(String[] args) { Animal cat = new Cat(); cat.eat(); }}
编写测试代码并执行:
错误1:对于类中包含抽象方法的情况下, 必须把这个类定义为抽象类, 否则会出现语法错误。
编译的时候会有对应的提示:
错误2:抽象类中的抽象方法子类没有重写(覆盖)。也就是子类没有实现父类的抽象类。
编译之后查看错误信息:
从 Java 编译器提示的错误信息,可以知道两种解决方法, 抽象方法子类要么实现, 要么继续为抽象方法。
因为包含抽象方法的类必须类也是抽象的,同理不重写的情况下就需要继续套娃下去。方法的实现就按第一个例子 ,正常测试就好, 如果是继续定义为抽象方法, 这里就引出另一种错误类型。
错误3:抽象类无法实例化,也就是说抽象类无法进行 new 构造方法。这里虽然无法 new 但是不代表抽象类没有构造方法,演示代码如下:
对于抽象类依然可以有具体的行为和属性。修改父类代码, 加入动物都会出声的描述。
编译运行:
可以看到虽然没有重写对应的 sound 方法,但是子类调用的时候依然可以使用该方法。 需要注意的是,如果父类中没有这个方法, 子类存在这个方法, 这里就需要注意, 编译器是无法调用类中没有生命的方法的。 虽然这里可以强转的方式调用。
抽象类中的构造方法演示
对于抽象类一样可以使用构造方法进行一系列的初始化操作。
抽象类是否可以使用 final 修饰符
对于 final 声明在类上的含义为:final 修饰类, 此类就无法被继承, 无法被继承也就没有了子类。因为抽象类想要使用就必须实现其中的方法, 实现的方式就是子类实现。两者概念上就有冲突, 所以无法进行使用 fianl 修饰。
抽象类是否可以使用 static 修饰符
类中声明是无法使用 static 修饰符的, 但是对于内部类来说有比较例外, 对于内部类的 static 修饰符修饰的抽象类。 可以理解自动提升内部类为外部类了。 举例说明:
抽象类的基础概念和使用方法大概就这么多了吧。 如果有其他的使用方法可以评论留言。 更多内容努力码中。
关注, 点赞, 收藏。
每篇一句:软件设计有两种方式:一种方式是,使软件过于简单,明显没有缺陷;另一种方式是,使软件过于复杂,没有明显的缺陷。——C.A.R. Hoare (英国计算机科学家,图灵奖得主。他设计出了快速排序算法、霍尔逻辑、交谈循序程式。)
标签: #java实例化抽象类