• Java—抽象类


    目录

    1.抽象类

    1.1抽象类概述

    1.2抽象类的特点

    1.3抽象类的成员特点

    案例:猫和狗


    1.抽象类

    1.1抽象类概述

    在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类,用abstract关键字修饰。

    动物类:

    1. package zyy02;
    2. public abstract class Animal {
    3. public abstract void eat();
    4. }

    测试类:

    1. package zyy02;
    2. public class Demo {
    3. public static void main(String[] args) {
    4. /*
    5. Animal a=new Animal();//抽象类不是具体的所以不能创建对象
    6. a.eat();
    7. */
    8. }
    9. }

    1.2抽象类的特点

    1、抽象类和抽象方法必须使用abstract关键字修饰
            publicabstract class 类名 {} 

            public abstract void eat();
    2、抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类

    3、抽象类不能实例化
            抽象类如何实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象类多态

    4、抽象类的子类
            要么重写抽象类中的所有抽象方法

            要么是抽象类

    1.3抽象类的成员特点

    成员变量
            可以是变量

            也可以是常量

    构造方法

    有构造方法,但是不能实例化
            那么,构造方法的作用是什么呢?

                    用于子类访问父类数据的初始化

    成员方法
            可以有抽象方法:限定子类必须完成某些动作

            也可以有非抽象方法:提高代码复用性

    案例:猫和狗

    需求:请采用抽象类的思想实现猫和狗的案例,并在测试类中进行测试

    思路:
    1.定义动物类(Animal)
            成员变量:姓名,年龄

            构造方法:无参,带参
            成员方法:get/set方法,吃饭;

    2.定义猫类(Cat),继承动物类
            构造方法:无参,带参

            成员方法:重写吃饭{}

    3.定义狗类(Dog),继承动物类
            构造方法:无参,带参

            成员方法:重写吃饭{}
    4.定义测试类(AnimalDemo),写代码测试

    动物类:

    1. package zyy02;
    2. public abstract class Animal {
    3. public String name;
    4. public int age;
    5. public Animal(){
    6. }
    7. public Animal(String name,int age){
    8. this.name =name;
    9. this.age=age;
    10. }
    11. public String getName() {
    12. return name;
    13. }
    14. public void setName(String name) {
    15. this.name = name;
    16. }
    17. public int getAge() {
    18. return age;
    19. }
    20. public void setAge(int age) {
    21. this.age = age;
    22. }
    23. public abstract void eat();
    24. }

    猫类:

    1. package zyy02;
    2. public abstract class Animal {
    3. public String name;
    4. public int age;
    5. public Animal(){
    6. }
    7. public Animal(String name,int age){
    8. this.name =name;
    9. this.age=age;
    10. }
    11. public String getName() {
    12. return name;
    13. }
    14. public void setName(String name) {
    15. this.name = name;
    16. }
    17. public int getAge() {
    18. return age;
    19. }
    20. public void setAge(int age) {
    21. this.age = age;
    22. }
    23. public abstract void eat();
    24. }

    狗类:

    1. package zyy02;
    2. public class Dog extends Animal{
    3. public Dog(){
    4. }
    5. public Dog(String name,int age){
    6. super.name=name;
    7. super.age=age;
    8. }
    9. @Override
    10. public void eat() {
    11. System.out.println("狗吃骨头");
    12. }
    13. }

    测试类:

    1. package zyy02;
    2. public class Demo {
    3. public static void main(String[] args) {
    4. Animal a=new Cat();
    5. a.setAge(14);
    6. a.setName("zyy");
    7. System.out.println(a.getName()+","+a.getAge());
    8. a.eat();
    9. System.out.println("*************");
    10. Animal b=new Dog("jw",18);
    11. System.out.println(b.getName()+","+b.getAge());
    12. b.eat();
    13. }
    14. }

    运行结果:

     

  • 相关阅读:
    产品经理视角 | API接口知识小结
    开快递驿站能赚钱么?去掉成本,一个月能赚多少钱?
    bugku web篇(二)
    交易用户如何去使用l2行情数据api接口?
    基于php开发的外卖订餐网站
    MyCat2的介绍与安装以及基本使用
    【学习记录】动态数组(vector)的基本操作,包括插入、删除、扩容、输出、释放内存等。用C语言编写
    vue2+element-ui批量导入方法并判断上传的文件是否为xls或xlsx
    SLAM从入门到精通(构建自己的slam包)
    分享今年接的几个私活项目
  • 原文地址:https://blog.csdn.net/qq_62799214/article/details/126079304