所谓的抽象:含糊不清 对于父类的抽象方法,子类需要重写和覆盖,重写过程中就可以对抽象方法进行具体化 抽象类的具体功能体现在抽象方法上面【含有抽象方法的类是抽象类】
注意:
* 1. 抽象类是不能进行实例化(不能建对象)
* (Animal是个抽象类,不能通过Animal类创建个Animal())
*
* 2. 抽象类必须至少要有一个子类进行继承
* (Pig类 继承 Animal类)
*
* 3. 抽象类中出现多个抽象方法,一定要对每个抽象方法进行重写。如果不写,否则子类报错,提示重写抽象方法
* (Animal类中有吃、睡方法,要在Pig中进行重写)
*
* 4. 抽象类是有构造方法的,目的是供子类创建对象时,初始化父类的成员变量
*
* 5. 抽象类不一定包含抽象方法,但是包含抽象方法的类是抽象类
(如果将抽象类的这两段代码【public abstract void eat()、public abstract void sleep()】注释,依旧是抽象类,系统不会报错)
代码演示:抽象类
// 抽象方法
package study.abstract1;
import sun.plugin.viewer.context.PluginBeansContext;
public abstract class Animal {
int id;
public Animal(){
}
public Animal(int id){
this.id = id;
System.out.println("Animal:"+this.id);
}
public abstract void eat();
public abstract void sleep();
}
// 子类继承抽象方法
package study.abstract1;
public class Pig extends Animal {
public Pig(){
}
public Pig(int id){
super(id);
}
// 成员方法对父类抽象方法进行覆盖
@Override
public void eat() {
System.out.println("猪猪在吃饭!!!");
}
@Override
public void sleep() {
System.out.println("猪猪在睡觉!!!");
}
}
package study.abstract1;
public class AbstractDemo {
public static void main(String[] args) {
// Animal animal = new Animal();
// 1. 抽象类不能进行实例化(不能创建对象)
Animal animal = new Pig(1); // 向上造型
animal.eat();
animal.sleep();
System.out.println("=============================");
Pig pig = new Pig();
pig.eat();
pig.sleep();
Pig pig = new Pig(15);
}
}
编译效果
猪猪在吃饭!!! 猪猪在睡觉!!! ============================= 猪猪在吃饭!!! 猪猪在睡觉!!! Animal:15



