抽象方法有什么特点,
如何声明一个抽象方法等内容。
=======================================================================
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
值得注意的是,一个抽象类不能直接实例化,但类的其他功能依然存在;既然不能被实例化,那么它必须被继承才能被使用。
老是在想为什么要引用抽象类,一般类不就够用了吗。一般类里定义的方法,子类也可以覆盖,没必要定义成抽象的啊。
其实不是说抽象类有什么用,一般类确实也能满足应用,但是现实中确实有些父类中的方法确实没有必要写,因为各个子类中的这个方法肯定会有不同,所以没有必要再父类里写。当然你也可以把抽象类都写成非抽象类,但是这样没有必要。
而写成抽象类,这样别人看到你的代码,或你看到别人的代码,你就会注意抽象方法,而知道这个方法是在子类中实现的,所以,有个提示作用。
例如,父类 Pet
被子类 Cat
和 Dog
继承,并且都重写了父类的 eat
方法:
class Pet {
// 定义方法 eat
public void eat() {
System.out.println(“宠物都会吃东西”);
}
}
class Dog extends Pet { // 继承父类
// 重写父类方法 eat
@Override
public void eat() {
System.out.println(“狗狗吃狗粮”);
}
}
class Cat extends Pet { // 继承父类
// 重写父类方法 eat
@Override
public void eat() {
System.out.println(“猫猫吃猫粮”);
}
}
小猫类、小狗类这些子类都重写了宠物类中的 eat
方法,我们知道每种宠物都有吃的行为,宠物表示了一个抽象的概念。那么宠物类的实例化和方法调用就没有了实际意义:
Pet pet = new Pet();
pet.eat();
我们知道了抽象类不能被实例化,此时可以将父类设定为抽象类,使用 abstract
关键字来声明抽象类,abstract
关键字必须放在 class
关键字前面 :
// 声明抽象类
abstract class Pet {
…
}
如果你尝试实例化抽象类 Pet
,编译器将会报错:
Pet.java:4: 错误: Pet是抽象的; 无法实例化
new Pet();
^
1 个错误
使用抽象类,我们既可以通过父类和子类的继承关系,来限制子类的设计随意性,也可以避免父类的无意义实例化。
如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法。
Abstract 关键字同样可以用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体。
抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。
上面我们将 Pet
父类改为了抽象类,其中包含了 eat
方法的具体实现,而实际上这个方法是不需要具体实现的,每种宠物都有各自的具体实现。此时,就可以将 eat
方法改为抽象方法:
abstract class Pet {
abstract void eat();
}
我们可以看到抽象方法使用 abstract
关键字声明,它没有方法体,而直接使用 ;
结尾。
子类必须实现父类中的抽象方法,假如 Dog
类继承了抽象类 Pet
,但没有实现其抽象方法 eat
:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
读者福利
由于篇幅过长,就不展示所有面试题了,感兴趣的小伙伴
更多笔记分享
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
ZL-1713678981478)]
[外链图片转存中…(img-Ht7DnELh-1713678981478)]
更多笔记分享
[外链图片转存中…(img-6tQ2vZiz-1713678981479)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!