- 抽象类是由abstract修饰的类,它不能被实例化,但是它也是有构造方法的,只要是类就有构造方法;
- 抽象类如何变为“实体类”,这里所说的实体类就是可以new出对象的类,我知道只有一种方法,让一个普通类继承这个抽象类,并实现抽象类的抽象方法;
- 一个类继承一个抽象类,当这个类被abstract修饰时,它可以不用继承抽象类的抽象方法,但是它不能被实例化,因为有未被完成的方法;
- 一下是代码实例:
- 创建一个抽象类:
/** * @author 橙橙橙。 * 2019年3月24日 * 描述:创建一个抽象类 */ public abstract class Father { public Father() { } //创建两个抽象方法 public abstract void eat(); public abstract void work(); }
2、写一个类,给它前面加abstract关键字,再让它继承这个Father类;
/** * @author 橙橙橙。 * 描述:SubClass继承Father类,但并不实现它的抽象方法 * 划重点:一个抽象类继承一个抽象类,可以不用重写继承的抽象类的抽象方法; */ public abstract class SubClass extends Father{ public SubClass() { } }
3、我们来new一下SubClass类;
/** * @author 橙橙橙。 *描述:在没有实现Father类抽象方法的情况下,new SubClass类就必须实现Father的抽象方法; */ public class Test { public static void main(String[] args) { SubClass class1 = new SubClass() { @Override public void eat() { // TODO Auto-generated method stub } @Override public void work() { // TODO Auto-generated method stub } }; } }
划重点:
Q:为什么在抽象子类中可以不实现抽象父类的抽象方法?
A:因为都是抽象类,父类可以保留的方法在抽象子类中也可以保留,子类与父类具有相同的性质;
Q:为什么在new子类的时候需要实现抽象方法?
A:因为new就代表创建一个对象,一般情况下,实体类才会创建对象,这里的实体类可以这样理解:没有未实现的方法,是一个独立完整的个体。而SubClass并不是一个独立完整的个体,它还有父类未实现的方法。所以,在它创建对象的时候,必须将它变成实体类。
如果大家觉得我理解有偏差,特别欢迎在评论区指点一二,感激不尽~
4、当SubClass继承Father类,并实现Father类的抽象方法;
/**
* @author 橙橙橙。
* 描述:SubClass继承Father类,但并不实现它的抽象方法
* 划重点:一个类继承一个抽象类,并且实现抽象类的抽象方法;
*/
public class SubClass extends Father{
public SubClass() {
}
@Override
public void eat() {
System.out.println("这是吃饭的方法~");
}
@Override
public void work() {
System.out.println("这是睡觉的方法~");
}
}
5、使用SubClass创建一个实例;
public class Test {
public static void main(String[] args) {
SubClass class1 = new SubClass();
class1.eat();
class1.work();
}
大家可以看到,这次SubClass成功简洁的创建了对象,为什么呢?当然是它在继承Father类时,实现了抽象类的抽象方法,所以它已经是一个完整独立的实体类了!
运行结果如下:
写完了,欢迎大家提问题,找问题,一起讨论问题~