Java中abstract关键字,抽象类和抽象方法知识点总结

抽象类

抽象类定义

在继承中,每个子类的实现方法都各不相同,父类不能直接决定他们各自的实现方法,所以在父类中只写方法声明,并不会实现具体方法。于是子类就得各自实现自己的具体方法。在类中只有方法声明的方法叫抽象方法,而拥有抽象方法的类叫抽象类。

关键字abstract:抽象的

声明:不写函数体的函数,就叫声明

抽象方法:abstract修饰的方法

抽象类:abstract修饰的类

抽象类功能:1.节省代码 2.制定规则

public class AbstractClass {

}
//抽象类
abstract class Animal{
    String name;
    int age;
    public void bark(){};
}

抽象方法

在父类中定义的方法,无法满足子类的需求。或者如果这个方法在所有的子类中都被重写,父类中的这个方法如何实现显得没什么意义了。此时,父类如果实现这个方法,代码就会冗余;如果不定义这个方法,那么就无法表示所有的子类都有这个方法。

针对这种情况,我们可以将这种方法定义成抽象方法。

public class AbstractClass {

}
abstract class Animal{
    String name;
    int age;
    //abstract修饰的方法称为抽象方法
    public abstract void bark();
}

特点

抽象方法只有方法的声明,没有实现。

抽象方法只能定义在抽象类中。

抽象类的继承

抽象方法的一个特点是只能定义在抽象类中。如果一个非抽象子类继承一个抽象父类。那么,此时可以继承到父类中的抽象方法。那么抽象方法就存在与一个非抽象子类中了。这是有问题的。

解决方法是,继承父类抽象方法的子类,必须重写实现抽象父类中的所有抽象方法,或者把自己变为抽象类。

注意点:抽象类不能直接创建对象。但可以通过子类间接的创建对象。

public class AbstractClass {

}
abstract class Animal{
    String name;
    int age;
    //被abstract修饰的抽象方法
    //只能定义在抽象类中
    public abstract void bark();
}
//方法一 重写父类中的抽象方法
class Dog extends Animal{
    @Override
    public void bark() {
        System.out.println("汪汪~~");
    }
}
//方法二 将自己变成抽象类
abstract class Cat{
    
}

抽象类总结

基本点总结

抽象类不一定有抽象方法,但有抽象方法的一定是抽象类。换言之抽象方法只能存在于抽象类中。

继承了抽象类的子类一定要实现抽象方法,若不实现就只能将自己也改成抽象类。

抽象类不能直接创建对象,必须通过自类实现。所以抽象类一定有子类。

普通类与抽象类区别

普通类可以直接创建对象,抽象类不能。

抽象类可以抽象方法,普通类不能有。

final,abstract,private三者比较:

三个都是不能与abstract同时存在的关键字。

  1. final:被final修饰的类不能有子类,方法不能重写,但是abstract必须有子类,且必须要重写
  2. static:被static修饰的方法可以通过类名调用,但abstract必须通过子类实现
  3. private:被private修饰的方法不能重写,但abstract必须要重写

抽象类使用场景

非抽象类在继承一个抽象父类时,必须重写父类中的所有抽象方法。通过这种方式,抽象类可以做一些规则指定。

在抽象父类中定义的抽象方法也就是规则,要求子类必须全部实现,同时约束所有子类的行为。

public class AbstractClass {

}
abstract class Animal{
    String name;
    int age;
    //父类定义的bark抽象类(规则)
    public abstract void bark();
}

//子类 Dog和Cat都必须实现bark这个方法
class Dog extends Animal{
    @Override
    public void bark() {
        System.out.println("汪汪~~");
    }
}

class Cat extends Animal{
    @Override
    public void bark() {
        
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mercury_春秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值