关于Java中的抽象类注意事项

🏆文章导读

在本篇文章中,对抽象类进行了一个详细的解读,讲解了什么是抽象类,什么是抽象方法,抽象类的关键字,以及抽象类的注意事项;干货满满!!!希望读者能够详细的阅读,如果有不足的地方,还望读者能够指出,您的意见就是我最大的进步

🍂抽象类的定义

抽象类概念:如果一个类中没有包含足够的信息来描绘具体的对象,那这样的类就称为抽象类;

就比如以下代码:

在java中,一个类如果被abstract修饰则称为抽象类,抽象类中被abstract修饰的方法称为**抽象方法,**如果在一个方法中,不想有一个具体的实现,那么这个方法就可以定义成抽象方法,就像eat方法,它只表述了动物吃饭这个行为,并没有具体的说明什么动物吃什么。

然而,在抽象类中,也可以有普通的成员变量和成员方法

//抽象类,被abstract修饰
public abstract class Animal {
    //抽象类中也可以有普通成员变量
    int a = 10;
   /* public void eat() {
        System.out.println("动物吃饭");
    }*/
    //因为在子类中又重写了这个方法,所以方法里面的语句写不写都无所谓
    public abstract void eat();
    //抽象类中也可以有普通成员方法
    public void sleep() {
        
    }
    
}
//子类
public class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("小狗吃狗粮");
    }
}
//子类
public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("小猫吃猫粮");
    }
}

public class TestAnimal {
    public static void method(Animal animal) {
        animal.eat();
    }
    public static void main(String[] args) {
        Dog dog = new Dog();
        Cat cat = new Cat();
        method(dog);
        method(cat);
    }
}

🍂抽象类的特性

1、抽象类是不能被实例化的

在上面的TestAnimal类中实例化一个抽象类对象是错误的!,但是,如果抽象类不能被实例化,那抽象类又有什么作用呢?答案是:抽象类是用来被继承的;

在这里插入图片描述

虽然抽象类不能被实例化,但是抽象类可以被继承,可以发生向上转型,所以就能发生动态绑定,所以就可以实现多态!!!

在这里插入图片描述

2、普通类继承抽象类后,必须在普通类中重写抽象类中的抽象方法,而对于抽象类中的普通方法,重不重写都无所谓;

//抽象类
public abstract class Animal {
    public abstract void eat();
}

public class Dog extends Animal{
	/*@Override
    public void eat() {
        System.out.println("小狗吃狗粮");
    }*/
}

在这里插入图片描述

3、抽象方法不能被private修饰,因为被private修饰的方法不能被继承,而抽象方法一定要被重写

在这里插入图片描述

4、抽象方法不能被final和static修饰,因为抽象方法一定要被子类重写,而final修饰的方法则不能重写

在这里插入图片描述

5、抽象类中可以有构造方法,其作用是在利用子类初始化父类成员变量

在这里插入图片描述

🍂总结:

1、被abstract修饰的类称为抽象类

2、被abstract修饰的方法称为抽象方法

3、抽象类当中可以有普通的成员方法和成员变量

4、抽象类不能被实例化

5、抽象方法不能被final和static以及private修饰

6、抽象类中可以有构造方法,其作用是利用子类构造方法帮助父类初始化成员变量

7、抽象类中不一定包含抽象方法,但包含抽象方法的类一定是抽象类

8、抽象类中的抽象方法必须被重写

面试题

普通类和抽象类有哪些区别?

1、普通类不能包括抽象方法,抽象类可以包含抽象方法,普通方法。

2、抽象类不能直接实例化,必须被继承,普通类可以直接实例化

抽象类能使用final继承吗?

不能,定义抽象类就是被其他类继承的,如果用final修饰的话,该类就不能被继承了,这样彼此就会产生矛盾,所以final不能修饰抽象类!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值