抽象类基本概念

抽象类及抽象方法

概念:一个类中没有包含足够的信息来描绘一个具体的对象,这种类被定义为抽象类,含有抽象方法的类也被称为抽象类。

用通俗的话来说就是当一个类的某个功能(方法)实现不确定时,我们就将该功能(方法)用abstract修饰,让其变为抽象方法,这个方法所在的类就称为抽象类,我们让某个类来继承这个抽象类,称为该抽象类的子类,让这个子类来具体实现这个方法。当然,这个子类可以不实现这个抽象方法,但是这个子类也要成为一个抽象类。

抽象方法的声明

语法格式:[访问权限修饰符] abstract 返回值类型 方法名(参数列表) [throws 异常列表];

public abstract void eat();

注意

  • 抽象方法不能被private,final,static修饰。
  • 抽象方法不能有方法体。

抽象类的声明

语法格式:[权限修饰符] abstract class 类名{ }

public abstract class Test{}

注意

  • 抽象类中可以包含五种成分,成员变量,方法,初始化块,构造器,内部类。
  • 抽象类中不一定要有抽象方法。

抽象类的局限性

  • 抽象类有时候会出现代码冗余的问题
  • 类的继承是单根继承,一个类只能直接继承一个类。

代码实现:

abstract class Animal {
    String name;
    int age;
    public abstract void eat(); 
}

class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("小猫吃鱼");
    }
}

class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("小狗啃骨头");
    }
}
public class Test01 {
    public static void main(String[] args) {
   		Cat cat = new Cat();
        cat.eat();//输出小猫吃鱼
        Dog dog = new Dog();
        dog.eat();//输出小狗啃骨头
    }
}

注意抽象类不能创建对象!

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

测试类:

public class Test02 {
	public static void main(String[] args) {
		Person person = new Person() {
			@Override
			public void eat() {
				System.out.println("印度人喜欢吃咖喱");
			}
		};
		person.eat();//输出:印度人喜欢吃咖喱
	}
}

代码分析:

  1. 底层创建匿名类,继承Person类,重写eat()
  2. 创建匿名类的对象
  3. 将匿名类对象的内存地址赋值给父类的引用

内存分析:

在这里插入图片描述

总结

  1. 抽象类中只能有抽象方法?
    抽象类中可以有构造方法、静态方法、成员方法、抽象方法
  2. 抽象类中不可以没有抽象方法?
    可以,但是毫无意义
  3. 如果父类是抽象类,则子类必须实现父类的抽象方法?
    不一定,子类如果是抽象类,可以不实现父类的抽象方法
  4. 抽象类不能有构造方法?
    可以有
  5. 可以使用new关键字来创建抽象类对象?
    不能,创建的是匿名内部类的对象

相关推荐

  1. Python基础(二十八、多态、抽象

    2024-05-10 21:46:07       40 阅读
  2. 接口和抽象

    2024-05-10 21:46:07       43 阅读
  3. c# 抽象

    2024-05-10 21:46:07       33 阅读
  4. 抽象abstract

    2024-05-10 21:46:07       22 阅读
  5. 抽象和接口

    2024-05-10 21:46:07       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-10 21:46:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-10 21:46:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-10 21:46:07       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-10 21:46:07       20 阅读

热门阅读

  1. 【力扣】143. 重排链表

    2024-05-10 21:46:07       11 阅读
  2. c#笔记(调用exe,xmal,gif)

    2024-05-10 21:46:07       12 阅读
  3. 规则引擎简单介绍以及与设计模式之间的关系

    2024-05-10 21:46:07       12 阅读
  4. 【TypeScript高级类型简介以及使用方法】

    2024-05-10 21:46:07       11 阅读
  5. 洛谷P10397题解

    2024-05-10 21:46:07       14 阅读
  6. CF988D题解

    2024-05-10 21:46:07       11 阅读
  7. React 第二十八章 前端框架

    2024-05-10 21:46:07       9 阅读
  8. 按键精灵写的有点失败了

    2024-05-10 21:46:07       9 阅读