前言
Hello,大家好!很开心与你们在这里相遇,我是一个喜欢文字、喜欢有趣的灵魂、喜欢探索一切有趣事物的女孩,想与你们共同学习、探索关于IT的相关知识,希望我们可以一路陪伴~
1. 抽象
- 什么是抽象
父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了。我们把没有方法主体的方法称为抽象方法。
Java语法规定,包含抽象方法的类就是抽象类。
父类中的方法应该不是具体的,具体的实现应该由子类来具体实现;但是父类中的方法一定是具有共性方法。
- 什么是抽象方法
只有方法的声明,没有方法体{}的方法,就是抽象方法。
- 什么是抽象类
抽象方法所在的类必定是一个抽象类。
1.1 抽象类和抽象方法
抽象方法:
使用abstract关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。
- 定义格式
修饰符 abstract 返回值类型 方法名 (参数列表);
- 示例
public abstract void run();
抽象类:
如果一个类包含抽象方法,那么该类必须是抽象类。
- 定义格式
public abstract class 类名字 {
}
- 代码示例
public abstract class Animal {
public abstract void run();
}
1.2 抽象的使用
具体的子类继承抽象的父类必须重写父类所有的抽象方法
抽象的子类继承抽象的父类,不用再去重写父类的所有抽象方法,这种是没有意义。
- 代码示例:
/**
* @Desc: 抽象类中可以有抽象方法,也可以有非抽象方法
* 有抽象方法的类,这类一定是一个抽象类
*/
public abstract class Animal {
//抽象类有构造方法吗? 有
public Animal(){}
//抽象类可以实例化 不能
/**
* 抽象方法一定是共有,只不过每个子类实现的方式不一样
*/
public abstract void eat();
public abstract void run();
public void show(){
System.out.println("我是动物中show方法");
}
}
/**
* @Desc: 子类如果是一个具体的类,必须重写父类中所有抽象方法
*/
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
@Override
public void run() {
System.out.println("猫走猫步");
}
}
/**
* @Desc: 子类如果是抽象的,不需要重写父类中的抽象方法
*/
public abstract class Dog extends Animal {
}
/**
* @Desc: 如果子类继承抽象类,抽象类中有抽象方法必须要重写,有非抽象方法,直接继承
*/
public class CatTest {
public static void main(String[] args) {
//抽象类本身是不可以实例化
// Animal an = new Animal();
Cat c = new Cat();
//重写抽象类中的方法
c.eat();
c.run();
//直接继承过来的show方法
c.show();
}
}