首页 > 编程语言 >java抽象类的定义和使用

java抽象类的定义和使用

时间:2022-12-06 10:13:22浏览次数:37  
标签:java 定义 Dog 抽象 Animal 抽象类 方法 public

1. 抽象类的规则

● 抽象类不可以被实例化,也就是不能被new,会出现编译错误。抽象类如果想实例化可以通过非抽象子类的方式去实现。
● 抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类。而且抽象类中的抽象方法只能做方法声明,不能有具体的实现逻辑。
● 抽象类中的抽象方法,在非抽象子类中必须要实现。
● 构造方法、类方法(用static修饰的方法)不能声明为抽象方法。

2. 说明

一般是在设计阶段决定抽象类的使用,抽象类在业务中一般表示一种分类,而其子类这是该分类下的具体。例如 动物 分为 猫、狗等,在代码的实现时可以将 Animal 使用 abstract 修饰,而 Cat 、Dog两个类要继承Animal,如果Animal中有 abstract 修饰的方法,在 Cat 和 Dog必须要实现抽象方法。除非 Cat、Dog 也是使用 abstract修饰。

3. 代码实现

Animal.java

// 抽象类中才可以有抽象方法
public abstract class Animal {

    private String name;

    // 抽象方法,只需要在此声明即可
    // 动物的行动方式
    public abstract void action();

    public void eat() {
        System.out.println("动物都会吃东西");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

** Dog.java**

// 该类是 Animal 的非抽象子类,抽象方法必须要实现
public class Dog extends Animal {

    public Dog() {
        this.setName("狗");
    }

    // 此方法在 Aniaml中是非抽象方法,在 Dog 中不是必须重写的方法
    @Override
    public void eat() {
        System.out.println("狗可以吃骨头");
    }

    // 此方法在 Aniaml中是 抽象方法,在 Dog 中必有具体实现
    @Override
    public void action() {
        System.out.println("狗可以跑");
    }
}

Cats.java

// 当 Animal 的子类同为抽象类的时候,抽象方法可以不用实现
public abstract class Cat extends Animal {

    public Cat() {
        this.setName("猫类");
    }
}

抽象类 Animal 是不能直接使用new创建实例的,只能通过 实例化其非抽象子类

public static void main(String[] args) {
    // 实例化方式
    Animal dog = new Dog();

    // 此种方式相当于直接创建一个 非抽象类,不是抽象类实例化的一种方式
    Animal animal = new Animal() {
        @Override
        public void action() {
        }
    };
}

标签:java,定义,Dog,抽象,Animal,抽象类,方法,public
From: https://www.cnblogs.com/xiangningdeguang/p/16954385.html

相关文章

  • Wix 安装部署(二)自定义安装界面和行为
        上一篇介绍了如何联合MSBuild来自动生成打包文件和对WIX的一些初步认识,http://www.cnblogs.com/stoneniqiu/p/3355086.html 。    这篇会在上篇的基......
  • Android(Lollipop/5.0) Material Design(六) 自定义动画
    官网地址:https://developer.android.com/intl/zh-tw/training/material/animations.html动画在Material设计中,为用户与app交互反馈他们的动作行为和提供了视觉上的连贯性。M......
  • Android 自定义组件之如何实现自定义组件
    简介Android提供了用于构建UI的强大的组件模型。两个基类:View和ViewGroup。可用Widget的部分名单包括Button,TextView,EditText,ListView,CheckBox,RadioButton,Gallery,Spin......
  • Java常见面试题
    1. Java中sleep和wait的区别①这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用b的sle......
  • Java程序设计——从方法学角度描述
    Java程序设计——从方法学角度描述作者:化志章 揭安全 钟林辉出版社:机械工业出版社  一、程序设计语言概述1.1程序的含义和程序设计策略1.2程序设计语言的......
  • Java使用LinkedList模拟一个堆栈或者队列数据结构
    用Java模拟一个堆栈或者队列数据结构。首先得明白堆栈和队列的数据结构:堆栈:先进后出队列:先进先出LinkedList中刚好有addFirst()和addLast()方法。1.publicclassStac......
  • java 如何正确使用接口返回对象Result
    1.Result的使用Result的使用,是java项目中开发接口的必备,它经常被我们用作接口的返回对象,方便前端或者其他程序的远程调用后处理业务。它一般包括以下几个属性:code:一般......
  • Android 自定义标题栏Title Bar
    在Android自定义标题栏,步骤很简单:1.在onCreate方法中声明如下代码:requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);setContentView(R.id.activity_main);getWindow().......
  • java 获取真实ip
    通过HttpServletRequest获取真实请求IPpackagecc.library.security.utils;importjavax.servlet.http.HttpServletRequest;/***CREATEBYfunnyZpCON2018/5/3......
  • Java网络编程---基于TCP协议实现客户端服务端通信
    首先,对于TCP协议,我们要明确:TCP:传输控制协议TCP会尽自己所能,尽量将数据发送给对方;但并不能保证100%可以发送给对方TCP会在数据发送不到对方的情况下,会给应用......