【Java】抽象类和抽象方法 超详细辨析

你真的了解java的抽象类和抽象方法吗?一起来看看吧。
(尽量整理的全面逻辑一点了,因为资料大多是零碎的提及,可以补充!)

抽象类

抽象类是不能实例化的类,可以包含抽象方法(没有实现的方法)和具体方法(有实现的方法)。

  • 使用关键字 abstract,它可以包含抽象方法和非抽象方法。
  • 抽象类可以有构造方法和成员变量。
  • 子类必须实现所有抽象方法,除非子类本身也是抽象类
  • 抽象类不能被实例化,通常用作其他类的基类,其中包含了一些通用的方法。
  • 抽象类中可以包含普通的成员变量和成员方法。
  • 因为抽象类不能被实例化,通常用于作为其他类的父类,声明方法而不实现它们,需要子类来实现。
public abstract class AbstractClass {        // 抽象类定义 
	public void nonAbstractMethod() { 
	                                 // 非抽象方法的实现 
	} 
	public abstract void abstractMethod();   // 抽象方法 
}
abstract class Animal {
    abstract void sound();         
               //抽象方法不能有方法体,也就是大括号对,它的实现要在子类里,不是在抽象类本身这里

    public void sleep() {
        System.out.println("Sleeping...");
    }
}

class Dog extends Animal {
    //覆盖
    @Override
    void sound() {
        System.out.println("Bark");          //继承覆盖抽象父类,具体实现了父类的抽象方法
    }
}

Q:抽象类的子类也都是抽象的吗?
A:不是的,在Java中,抽象类的子类不一定是抽象的。当一个抽象类有一个或多个抽象方法时,通常情况下,它的子类需要实现这些抽象方法。如果子类实现了所有的抽象方法,那么该子类就是一个非抽象类;如果子类没有实现所有的抽象方法,那么该子类必须继续声明为抽象类,或者它自己也要包含抽象方法。
下面是一个示例:

public abstract class AbstractClass {
    public abstract void abstractMethod();
}

public class ConcreteClass extends AbstractClass {
    // 非抽象子类需要实现抽象方法
    @Override
    public void abstractMethod() {
        // 实现抽象方法的具体逻辑
    }
}

在这个示例中,ConcreteClass 继承自 AbstractClass,并且实现了 abstractMethod 方法,因此它是一个非抽象类。

另外,如果一个抽象类并没有包含任何抽象方法,那么它的子类即使不实现任何方法也是非抽象类。


那么问题来了,抽象类和抽象方法有什么关系呢?
Q:抽象类必须包含抽象方法吗?
A:抽象类可以有抽象方法,也可以没有抽象方法。但是,如果一个类内部包含抽象方法,那么这个类必须声明为抽象类。

~
由此我们延伸出抽象方法的概念辨析~


抽象方法

  • 抽象方法是用 abstract 关键字声明、并且没有方法体的方法。(亲测有的话会报错
  • 抽象方法必须存在于抽象类中,但抽象类中可以包含抽象方法,也可以不包含。
  • 所有子类都需要实现抽象类中的抽象方法,除非子类本身也是抽象类。
public abstract class AbstractClass { 
     public abstract void abstractMethod(); // 抽象方法 
}

抽象类和抽象方法概念补充


期末笔记整理,有错误之处还望纠正和海涵。
本号持续更新java详细笔记和ac代码。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值