一篇文章带你了解Java基础-抽象

目录
  • Java基础知识(抽象)
    • 抽象
      • 抽象定义
      • abstract的使用
      • 定义抽象类
      • 抽象类的一些注意点
  • 总结

Java基础知识(抽象)

抽象

抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。具体地说,抽象就是人们在实践的基础上,对于丰富的感性材料通过去粗取精、去伪存真、由此及彼、由表及里的加工制作,形成概念、判断、推理等思维形式,以反映事物的本质和规律的方法。

抽象定义

在继承过程中,我们知道父类的方法可以子类进行重写,而每个子类各自的实现都不尽相同。就好比动物都有吃的方法行为吧,而每个动物的子类对于吃的东西都可能不是相同滴,可是这导致了什么呢?

我们定义父类的方法主体是不是就没有任何意义了,因为在子类调用方法过程中,是调用了自己重写的方法,而不是父类的方法。

也就是说,父类声明了方法,子类去各自实现该方法即可。代表着父类可以不知道具体实现是什么,但是清楚的有什么方法是需要的。所以方法父类完全只需要提供一个没有方法体的方法签名即可,具体实现交给子类自己去实现。

而我们对于这种没有方法体的方法称为抽象方法。在Java语法规定,包含抽象方法的类就是抽象类。

  • 抽象方法 : 没有方法体的方法。
  • 抽象类:包含抽象方法的类。

定义抽象的关键字:abstract,接下来看看如何使用吧!

abstract的使用

abstract是抽象的意思,用于修饰方法方法和类,修饰的方法是抽象方法,修饰的类是抽象类。

抽象方法:

使用abstract 关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。

定义格式:

权限修饰符 abstract 返回值类型 方法名 (参数列表);

代码如下:

public abstract void eat();

抽象类:

如果一个类包含抽象方法,那么该类必须是抽象类。

注意:抽象类不一定有抽象方法,但是有抽象方法的类必须定义成抽象类。

定义格式:

abstract class 类名字 {
}

代码如下:

public abstract class Animal {
    public abstract void eat();
}

定义抽象类

我们将之前的动物类改造成抽象类,然后吃的方法也改造成抽象方法。

注意:一旦定义为抽象类后,子类继承父类时,是必须重写里面的抽象方法。

定义抽象父类:

package com.na.pojo;
/**
 * 先定义一个抽象父类 --> 动物类
 * 动物都有一个吃的抽象方法
 */
public abstract class Animal {
    // 定义为抽象方法后,无需去做方法实体的实现!
    public abstract void eat();
}

定义子类:

猫咪:

package com.na.pojo;
/**
 * 定义猫类继承抽象动物类,
 * 随之重写里面的吃行为,因为猫也有吃的行为,但是猫喜欢吃罐头
 */
public class Cat extends Animal{
    // 抽象类的方法必须重写,不然编译会不通过。
    public void eat() {
        System.out.println("小喵咪都喜欢吃鱼罐头!");
    }
    /**
     * 增加一哥猫咪特有的玩球方法()
     */
    public void playBall() {
        System.out.println("小喵咪都喜欢小球!");
    }
}

小狗:

package com.na.pojo;
/**
 * 定义狗类继承抽象动物类,
 * 随之重写里面的吃行为,因为狗也有吃的行为,但是狗喜欢啃骨头
 */
public class Dog extends Animal{
    // 抽象类的方法必须重写,不然编译会不通过。
    public void eat() {
        System.out.println("小狗狗都爱啃骨头!");
    }
    public void walk() {
        System.out.println("小狗在被我溜着!");
    }
}

定义测试类:

package com.na;
import com.na.pojo.Animal;
import com.na.pojo.Cat;
import com.na.pojo.Dog;
public class Demo {
    public static void main(String[] args) {
        // 创建抽象类,抽象类不能创建对象
//		Animal animal = new Animal();
//        animal.eat();
        // 创建小猫咪
        Cat cat = new Cat();
        cat.eat();
        cat.playBall();
        Dog dog = new Dog();
        dog.eat();
        dog.walk();
    }
}

得到结果:

小喵咪都喜欢吃鱼罐头!
小喵咪都喜欢小球!
小狗狗都爱啃骨头!
小狗在被我溜着!

类的大致结构:

注意:假设抽象类可以创建对象,但是呢,里面的抽象方法是没有方法体给我们去实现,从而程序也是无法执行,所以不让我们创建对象。

抽象类的一些注意点

对于抽象类的使用,以下为抽象类的使用上要注意的细节:

1.抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。

假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。

2.抽象类中,可以有构造器,是供子类创建对象时,初始化父类成员使用的。

子类的构造方法中,有默认的super(),需要访问父类构造方法。

package com.na.pojo;
/**
 * 先定义一个抽象父类 --> 动物类
 * 动物都有一个吃的抽象方法
 */
public abstract class Animal {
    private String name;
    private int age;
    // 可以有构造器
    public Animal(){
    }
    // 甚至可以有参构造器
    public Animal(String name, int age){
        this.name = name;
        this.age = age;
    }
    // 定义为抽象方法后,无需去做方法实体的实现!
    public abstract void eat();
}

3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。

4.抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类,编译无法通过而报错。

如果子类不重写所有抽象方法,则类中可能会包含抽象方法。那么在创建对象后,调用抽象的方法,没有意义。

5.抽象类存在的意义是为了被子类继承,抽象类体现的是模板思想。

抽象类中已经实现的是模板中确定的成员,抽象类不确定如何实现的定义成抽象方法,交给具体的子类去实现。

总结

相信各位看官都对Java基础中的抽象的知识和使用有了一定了解,等待下一次更多Java基础的学习吧!

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • java并发之Lock接口的深入讲解

    目录 Juc中各种各样锁信息 synchronized面临缺点 Lock接口 对比 Lock和tryLock的区别 总结 Juc中各种各样锁信息 在java的juc包为我们提供了各种各样的锁信息.如果细心来看其大部分都会实现一个名为LOCK的接口信息本文皆在帮你回顾Lock信息: 通过本文你将了解到如下内容: 1.Lock和synchronized的对比 2.Lock中常见API的总结 synchronized面临缺点 锁的出现主要是为了保证在并发访问共享资源时不出现错. 在java中如果不考虑

  • Java之Swagger配置扫描接口以及开关案例讲解

    1. Swagger--配置扫描接口及开关 1.1 配置扫描接口 SwaggerConfig.java /** * 配置docket以配置Swagger具体参数 */ @Bean public Docket docket() { /* * 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口 * basePackage(final String basePackage) // 根据包路径扫描接口(最常用) * any() 扫描所有,项目中的所

  • java中的基础运算符

    目录 一.算术运算符 二.关系运算符 三.位运算和逻辑运算符 四.赋值运算符 一.算术运算符 算术运算符的作用和在数学中的作用一样,主要的算术运算符有以下几种 1.+加 2.-减 3.*乘 4./除 5.%取余 其中加.减.乘.除的用法同数学中的相同,不过需要注意的是 / 和 % 的区别:两个数据做除法,/取结果的商,%取结果的余数.除了这五种还有以下两种: ++自增:变量的值加1 – 自减:变量的值减1 使用时需要注意以下几点: ​ 1.++和-- 既可以放在变量的后边,也可以放在变量的前边.

  • 一篇文章带你了解java泛型--泛型类,泛型方法,泛型接口

    目录 Java 泛型 Java 泛型是什么 泛型类 泛型类的格式 泛型类举例 泛型方法 泛型方法的格式 泛型方法举例 泛型接口 泛型接口的格式 泛型接口举例 泛型接口实现类: 测试接口类: 打印结果: 总结 Java 泛型 Java 泛型是什么 官方定义: 泛型是Java SE 1.5的新特性,泛型的本质就是参数化类型,也就是说所操作的数据类型被指定为一个参数 这种参数类型可以用在类.接口和方法的创建中,分别成为泛型类.泛型接口.泛型方法 优缺点: ​ 优点:可以不用再类型转换了 ​ 缺点:降低

  • 一篇文章带你了解Java基础-接口

    目录 Java基础知识(接口) 接口 接口的定义 接口和抽象的区别 接口的格式 接口中的主要成分 接口的案例 接口与接口的关系 JDK 8之后的接口新增方法 总结 Java基础知识(接口) 接口 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 接口的定义 接口: 在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口

  • 一篇文章带你了解Java基础-抽象

    目录 Java基础知识(抽象) 抽象 抽象定义 abstract的使用 定义抽象类 抽象类的一些注意点 总结 Java基础知识(抽象) 抽象 抽象是从众多的事物中抽取出共同的.本质性的特征,而舍弃其非本质的特征的过程.具体地说,抽象就是人们在实践的基础上,对于丰富的感性材料通过去粗取精.去伪存真.由此及彼.由表及里的加工制作,形成概念.判断.推理等思维形式,以反映事物的本质和规律的方法. 抽象定义 在继承过程中,我们知道父类的方法可以子类进行重写,而每个子类各自的实现都不尽相同.就好比动物都有吃

  • 一篇文章带你了解Java基础-多态

    目录 Java基础知识(多态) 多态 多态的定义和存在的必要条件 多态的案例 多态的弊端 引用类型转换 总结 Java基础知识(多态) 多态 多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定. 因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用

  • 一篇文章带你了解Java Spring基础与IOC

    目录 About Spring About IOC Hello Spring Hello.java Beans.xml Test.java IOC创建对象的几种方式 Spring import settings Dependency Injection 1.构造器注入 2.set注入 3.拓展注入 P-namespcae&C-namespace Bean scopes singleton prototype Bean的自动装配 byName autowire byType autowire 小结

  • 一篇文章带你了解Java中ThreadPool线程池

    目录 ThreadPool 线程池的优势 线程池的特点 1 线程池的方法 (1) newFixedThreadPool (2) newSingleThreadExecutor (3) newScheduledThreadPool (4) newCachedThreadPool 2 线程池底层原理 3 线程池策略及分析 拒绝策略 如何设置maximumPoolSize大小 ThreadPool 线程池的优势 线程池做的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些

  • 一篇文章带你入门java工厂模式

    目录 总结: Java设计模式-工厂模式 什么是工厂模式? 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象. 简单编写一个类: 1.简单工厂模式 本程序非常简单就是通过接口的子类为接口对象实例化,但是本操作存在什么样的问题呢? 之前一直在强调,主方法或者是主类是一个客户端,客户端的操作应该越简单

  • 一篇文章带你入门Java Script

    目录 概述 特点 和Java的区别 弱类型语言 强类型语言 书写位置 数组 函数 JS中的自定义对象(扩展内容) Object形式的自定义对象 JS中的事件 常用的事件: 动态注册基本步骤: DOM模型 总结 概述 JavaScript是目前web开发中不可缺少的脚本语言,js不需要编译即可运行,运行在客户端,需要通过浏览器来解析执行JavaScript代码. JS组成部分: 组成部分 作用 ECMA Script 构成了JS核心的语法基础 BOM Browser Object Model 浏览

  • 一篇文章带你复习java知识点

    JDK JRE JVM JDK: Java标准开发包,它提供了编译.运⾏Java程序所需的各种⼯具和资源,包括Java编译器.Java运⾏时环境,以及常⽤的Java类库等. JRE: Java运⾏环境,⽤于解释执⾏Java的字节码⽂件. JVM Java虚拟机,是JRE的⼀部分.负责解释执⾏字节码⽂件,是可运⾏java字节码⽂件的虚拟计算机 区别联系:(问答题会考可能) JDK包含JRE,JDK 和 JRE 中都包含 JVM.JDK出了包含jre还包含⼀些常⽤开发⼯具和基础类库 JDK ⽤于开发

  • 一篇文章带你入门java集合

    目录 一.简介 1.java集合框架图 2.集合框架体系 3.Set和List的区别 二.ArrayList 1.定义 2.用实例了解ArrayList 三.LinkedList 1.语法 2.示例 四.HashSet 1.定义 2.语法 3.示例 五.HashMap 1.定义 2.语法 3.示例 Java HashMap 方法 六.Iterator(迭代器) 1.定义 2.示例 七.List和数组互转 总结 一.简介 1.java集合框架图 从上面的集合框架图可以看到,Java 集合框架主要包

  • 一篇文章带你入门java面向对象

    目录 一.继承 示例: 二.重载 三.接口 1.接口与类相似点: 2.接口与类的区别: 3.语法 四.枚举 1.定义 2.迭代枚举元素 3.在 switch 中使用枚举类 总结 一.继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为 本章就以人.学生.老师作为例子.学生和老师都继承人这个对象,都有人的特征和行为,人就是父类,老师和学生就是子类 示例: 人类: package com.zhouzy.base.t7;

随机推荐