JAVA初级(十四)抽象类介绍,抽象方法使用

什么是抽象类?

一个类如果没有足够的信息来描述,那么它就应该被设计成抽象类.
因此可以说抽象类就是一个有这么个功能,但不清楚要如何实现的这么一个类.
比如有一个动物类,动物都有吃的动作,但每一种动物吃的方式可能不同.这种情况下动物类就应该被设计成抽象类

抽象类如何定义?abstract关键字

如下,设置一个抽象类就是public abstract class 类名就可以了

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

申明成了抽象类就意味着这个类的功能不够明确,我们没有足够的信息来描述它,因此抽象类它不能被实例化.

public static void main(String[] args) {
  Animal animal = new Animal() ;//这样会直接报错提示abstract类不能被实例化
    }

所以我们就需要一个子类来实现它.比如我们创建一个鸟类继承动物类来实现这个吃的方法

public class Bird extends Animal{
    @Override
    public void eat() {//重写动物类的eat()方法
        System.out.println("鸟啄着吃");
    }
}

这样重写动物类的eat()方法,这是动物类的吃这个功能就被具体化了.有足够的信息来描述他了。因此这个时候就能实例化,但是要实例化实现了eat的那个类,也就是Bird

public static void main(String[] args) {
        Animal animal = new Bird() ;
        animal.eat();//这样就具体化了。
    }

总结:
1,抽象类不能被实例化,它直接被继承

抽象方法

上面的例子说到了动物的吃是一种抽象的行为,因为每一种动物的吃法都可能不同.但是代码上并没有体现出吃是一种抽象行为
比如

public class Bird extends Animal{
    @Override
    public void eat() {
        super.eat();//能调用animal类的eat(),说明了这个动物类的吃是具体的。
    }
}

因此抽象类有一个特殊组成,就是抽象方法.上面的eat()方法就应该是抽象方法.
抽象方法就是一个不知道具体行为,但又确实存在的一个行为,如过一个方法是抽象方法,那它在代码中体现出来就是我们直接调用Animal类的eat()应该要报错,因为我们不知道Animal的eat()行为.

抽象方法如何写?

public abstract class Animal {
    public abstract  void eat();//abstract修饰,没有大括号,直接分号
}

就这么写,用abstract修饰,去掉{}直接写分号.此时上面的super.eat()就会报错.会提示无法直接调用抽象方法,因为它是抽象的,我们不知道它的具体行为(代码中的表现就是没有方法体)

再看以下代码

public class Bird extends Animal{}//报错,提示必须重写父类的抽象方法

子类继承了父类,但没有去重写它的抽象方法,那就说明这个子类同样也是没有办法具体描述的,那么它也必须是抽象类

public abstract  class Bird extends Animal{}//编译通过

总结:
1,子类继承父类就必须重写父类的抽象方法,否则该类也必须声明为子类.
因为不这么做,你无法具体描述这个对象.

抽象类和抽象方法总结
1, 抽象类不能被实例化。只有抽象类的非抽象子类可以创建对象。
2. 抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类。
3.抽象类中的抽象方法没有方法体,就只是一个申明,需要子类继承并重写来实现它
4. 构造方法,static方法不能声明为抽象方法。
5, 子类继承抽象类,那么必须重写抽象类的抽象方法,否则该子类也必须申明为抽象类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值