抽象类和抽象方法
- 一、前言
- 二、抽象方法
- 1.定义
- 2.简单记忆方法
- 3.代码格式
- 4.使用说明
- 三、抽象类
- 1.定义
- 2.代码格式
- 3.使用说明
- 4.注意点
- 四、小练习
- 1.题目
- 2.分析
- 3.代码实现
- 1️⃣父类
- 2️⃣Frog类
- 3️⃣Dog类
- 4️⃣Rabbit类
- 5️⃣测试类
- 五、结语
一、前言
本文会梳理有关抽象类和抽象方法的知识点,这会运用在接口中,而接口是在实际开发中非常重要的,所以知识点非常重要
二、抽象方法
1.定义
抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现
2.简单记忆方法
概念听起来很复杂难懂,那我们举例说明
比如有三个人A、B、C的职业都是程序员,到了返点都要吃饭,但是每个人吃的东西不一样,有人吃爱心便当,有人吃盒饭,有人吃快餐,那么他们都有共同的方法:吃,并且他们都可以同属于一个父类:程序员,那么我们可以把共同的方法吃抽取到父类(程序员)中,由于子类(ABC三个人)吃的东西不相同,即方法体不同,所以要把该方法定义为抽象方法
3.代码格式
修饰符 abstract 返回值类型 方法名 (参数列表);
例如
public abstract void eat();]
4.使用说明
如果要继承父类中的抽象方法,则必须重写该方法,否则就让子类也变为抽象类
示例:
如果想要偷懒的话,点击 Alt+Enter
来查看解决方法
我们在这里选择第二个,实现方法
一个是父类中的抽象方法,另一个一个是接口(这个下一篇文章中会讲到)我们只需要全选然后点击回车就会自动帮我们生成重写的方法了
此时我们只要改写方法体即可
三、抽象类
1.定义
当某一个类中存在抽象方法,那么这个类就要被定义为抽象类
2.代码格式
abstract class 类名 {
}
例如:
abstract class Student {
}
3.使用说明
继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类
4.注意点
- 抽象类不能实例化
- 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。
- 当我们在一个非抽象的类中写抽象方法时,会报错
- 但是在抽象类中写非抽象方法,又不会报错
- 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则子类也必须定义成抽象类,编译无法通过而报错。
四、小练习
1.题目
属性 | 行为 | |
青蛙Frog | 名字、年龄(1) | 吃虫子、喝水 |
狗Dog | 名字、年龄(2) | 吃骨头、喝水 |
兔子 | 名字、年龄(3) | 吃胡萝卜、喝水 |
2.分析
eat是抽象方法,吃的东西不同,而drink都是喝水,所以不用使得该方法变为抽象方法
3.代码实现
1️⃣父类
public abstract class Animal {
private String name;
private int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public Animal() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public abstract void eat();
public void drink(){
System.out.println("喝水");
}
}
2️⃣Frog类
public class Frog extends Animal implements Swim {
public Frog(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("吃虫子");
}
@Override
public void drink() {
System.out.println("小青蛙喝水");
}
}
3️⃣Dog类
public class Dog extends Animal implements Swim {
public Dog(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("吃骨头");
}
@Override
public void drink() {
System.out.println("小狗喝水");
}
}
4️⃣Rabbit类
public class Rabbit extends Animal{
public Rabbit(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("吃胡萝卜");
}
@Override
public void drink() {
System.out.println("小狗喝水");
}
}
5️⃣测试类
public class Test {
public static void main(String[] args) {
Frog f = new Frog("小青蛙",1);
System.out.println(f.getName() + "今年" + f.getAge() + "岁\n它的行为有:");
f.eat();
f.drink();
System.out.println("---------------");
Dog g = new Dog("小狗",2);
System.out.println(g.getName() + "今年" + g.getAge() + "岁\n它的行为有:");
g.eat();
g.drink();
System.out.println("---------------");
Rabbit r = new Rabbit("小白兔",3);
System.out.println(r.getName() + "今年" + r.getAge() + "岁\n它的行为有:");
r.eat();
r.drink();
}
}
五、结语
下一篇文章会讲述有关接口的知识点