【JavaSE基础】深入学习和掌握抽象类,了解易错知识点(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

我们平时学习的普通类,它的构造有普通成员变量、普通成员方法、静态成员变量和静态成员方法以及一些方法体内的局部变量。而抽象类中它还可以包含抽象方法。所以我们初步就知道了,具有抽象方法的类就是抽象类。为了表示抽象的概念,我们需要在类的前面加上abstract关键字,告诉别人我们这个方法是抽象方法

🌴2.什么是抽象方法?


首先我们要明白一点,什么叫做抽象?抽象当然就是无法具体的描绘写来或者实例出来。我们都知道方法都是有一对{},大括号里面的内容就是我们的方法体,既然我们的抽象方法是无法具体的写出来的,那肯定是没有方法体的,所以我们要知道,**抽象方法是没有方法体的方法。为了告诉别人我们的方法是抽象方法,所以要在前面加上abstract关键字。**书写的格式如下:

public abstract class animal {//定义一个抽象类

abstract void test();//定义一个抽象方法,没有方法体也没有{},直接以;结尾

}

🌴3.什么时候使用抽象类和抽象方法?


我们都知道,一个类,代表一类具有共同身份或者特征的群体或者事务。比如老师这个群体,她可以是一个类,有生日和姓名这个属性,每天老师需要休息,吃饭还要工作等,通过这样我们写出老师类

public class Teacher {//表示老师类

String name;//姓名

String birthday;//生日

public void sleep(){}//表示休息的行为

public void eat(){}//表示吃饭的行为

public void word(){}//表示工作的行为

}

这时,根据我们的需求,我们还需要一个学生类,那我们再分析学生有哪些属性和行为呢?首先学生同样也有姓名和生日这两个属性,而且还可以加上一个学号。行为也有休息吃饭和工作(学习当然也是工作)等行为。于是我们得到学生类

public class Student {//表示学生类

String name;//姓名

String birthday;//生日

int id;//学号

public void sleep(){}//表示休息的行为

public void eat(){}//表示吃饭的行为

public void word(){}//表示工作的行为

}

这时我们突然发现,老师类和学生类有着类似的属性和行为,在两个类中同时声明相同的,这不是代码冗余了嘛?这时我们聪明的人们就想到,我们能不能把它们共有的东西都抽出来,然后让具有这些属性和行为的类去继承得到,这样就不用复写这么多相同的代码了。于是抽象类应用而生

🔑:抽象类是将多个类中的具有的相似的或者共有的属性和方法抽取出来的一个类。通过继承抽象类来获得这些属性和方法,从而减少我们地代码量,提高我们写代码地效率。

因为老师和学生都有人,所以我们抽取出它们的共同属性和行为一个抽象类Person

public abstract class Person {

String name;//姓名

String birthday;//生日

abstract void sleep();//表示休息的行为

abstract void eat();//表示吃饭的行为

abstract void word();//表示工作的行为

}

这时我们通过继承简化代码,去书写老师类和学生类

public class Teacher extends Person {

@Override

void sleep() {

System.out.println(“老师去教师宿舍休息”);

}

@Override

void eat() {

System.out.println(“老师去老师饭堂吃饭”);

}

@Override

void word() {

System.out.println(“老师认真教学”);

}

}

public class Student extends Person {

int id;

@Override

void sleep() {

System.out.println(“学生去学生宿舍休息”);

}

@Override

void eat() {

System.out.println(“学生去学生饭堂吃饭”);

}

@Override

void word() {

System.out.println(“学生认真听老师上课”);

}

}

注意事项:Person已经抽取了共同的属性name和birthday,所以我们继承以后不用再写学生需要补上学号的属性

🎃:抽象方法之所以不能有方法体,正是为了体现我们Java语言多态的特性,虽然老师和学生都有工作的方法行为,但工作的内容却不相同,一个是教书一个是上课。所以在抽象类中我们无法书写抽象方法的方法体,这也是抽象方法存在的意义。

🌴4.抽象类常考点归纳解析和易错点


🍋 1.抽象类不能实例化

前面我们已经提过,抽象类是抽调了几个类的相似属性和方法,它并不是指具体的某个类,当然不能实例化。而且想想名字,抽象抽象,抽象的东西当然不能实例咯。当然我们不能忘记,抽象类一般都是作为父类被继承,利用它父类的身份我们可以利用面向对象中的面向对象指向子类实例,当然这不属于实例化。这是抽象类最最最基本的性质,千万不能忘记!!利用上面Person类和Student演示如下

Person student = new Student();

🍋 2.抽象类中不一定包含抽象方法,有抽象方法的类必定是抽象类

最后

毕竟工作也这么久了 ,除了途虎一轮,也七七八八面试了不少大厂,像阿里、饿了么、美团、滴滴这些面试过程就不一一写在这篇文章上了。我会整理一份详细的面试过程及大家想知道的一些问题细节

美团面试经验

美团面试
字节面试经验
字节面试
菜鸟面试经验
菜鸟面试
蚂蚁金服面试经验
蚂蚁金服
唯品会面试经验
唯品会

因篇幅有限,图文无法详细发出

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
57237)]

因篇幅有限,图文无法详细发出

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-nOdMpEWA-1713436557238)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值