大佬给推荐的韩顺平老师的课程 2021年刚刚录的船新版本!
【零基础 快速学Java】韩顺平 零基础30天学会Java
我整理的学习路线与各章节学习笔记戳这里
硬把从另一个讲师那里看了300多集的我拽过来 几十节课一下子爱上这个节奏了!安利!!
具有其他语言基础的盆友只需要把前几章的章节总结简单看一下 然后再去着重看需要学习的章节就可以了!
知识点分的非常清晰! 每章还有总结 这…真的是我理想中的学习资料呐!
学习笔记整理过后放到这里
- 一方面是让自己再二次记忆一下
- 一方面是希望可以帮到有这方面知识需要的朋友 给他们一个新的切入点来重新了解这一个知识
本专题包括以下几个主要知识点~
本次笔记主要记录 抽象类 、 接口的内容
这两部分是非常重点的作用 同时这两者也是有一些关联的 让我们看看这两个部分的内容吧
文章目录
6.抽象类
【1】抽象类引出
先来看一段代码
class Animal{
private String name;
private int age;//属性定义
public Animal(String name, int age){
//含参构造器
super();
this.name = name;
this.age = age;
}
//动物都有eat的行为
public void eat(){
System.out.println("这里是某只动物 但是由于不清楚品种 所以目前不知道要吃啥 eat方法先声明着哈");
}
//上面这种方法的声明并没有啥意义哦!
public abstract void eat();
}
可以看到 这个 eat()
方法就是先声明出来 但是不确定如何实现
总结下
父类Animal中某些方法 需要声明但又不确定如何实现时 可以将其生命为抽象方法 那么这个父类Animal就是抽象类
抽象类具体介绍
- 用abstract关键字来修饰一个类时 这个类就叫抽象类
访问修饰符 abstract 类名{
}
- 用abstract关键字来修饰一个方法时 这个方法就是抽象方法
访问修饰符 abstract 返回类型 方法名(参数列表);
//没有方法体哦!!
-
抽象类的价值更多作用是在于设计 设计者设计好抽象类让子类继承并具体实现这个抽象类
-
抽象类是面试官比较爱问的知识点哦! 框架和设计模式中使用得较多!
【2】抽象类细节
1.抽象类不能被实例化
public class AbstractDetail01 {
public static void main(String[] args) {
//抽象类A 不能被实例化
//new A();
}
}
abstract class A {
public void hi() {
System.out.println("hi");
}
}
2.抽象类不一定要包含abstract方法
抽象类中可以没有abstract方法哦!
abstract class A {
public void hi() {
System.out.println("hi");
}
}
3.一旦类包含了abstract方法 这个类必须生命为abstract
4.abstract只能修饰类和方法 不能修饰属性和其他的内容
5.抽象类可以有任意成员 抽象类的本质还是类哦!
比如 非抽象方法 构造器 静态属性啥的 都星~
6.抽象方法不能有主体!也就是不能被实现!
这里抽象方法有了方法体 所以肯定会报错啦
7.如果一个类继承了抽象类 则它要不实现抽象类的所有抽象方法 要么自己也声明为抽象类
abstract class E {
public abstract void hi();
}
abstract class F extends E {
//这样不行!
}
class G extends E {
@Override
public void hi() {
//这里相等于 G 子类实现了父类 E 的抽象方法
//所谓实现方法,就是有方法体
}
8.抽象方法不能用private final static来修饰!因为这些关键字定义的方法不让重写啊!!
【3】抽象类课堂练习
【零基础 快速学Java】韩顺平 零基础30天学会Java_哔哩哔哩_
第四题——
超级好的一个例子哈!
抽象这个work方法 在设计虚拟类的时候就先不用考虑不同的员工对应的work方法内容不同该咋实现了!先定义抽象方法就行!
public class AbstractExercise01 {
public static void main(String[] args) {
//测试
Manager jack = new Manager("jack", 999, 50000);
jack.setBonus(8000);
jack.work();
CommonEmployee tom = new CommonEmployee("tom", 888, 20000