在这里插入代码片记录学习过程,仅供参考,有错或者叙述不当请指出。
Java-抽象
关键字:abstract
修饰对象:类、方法
抽象(abstract)是java继承中的一个概念,一个类如果被abstract修饰,那么这个类成为一个抽象类,不能生成对象,即不能单独实例化。
如果一个类不能被实例化那写着这个类的意义在哪里呢?这就是为什么说抽象是继承中的一个概念了——抽象类就是用来被继承的。
规则
-
抽象类不能被实例化
public abstract class Animal{ } public class Main(String[] args){ public static void main(String[] args) { Animal a=new Animal();//错误,抽象类不能实例化。 } } -
抽象方法只能有方法名和参数列表,不能包含方法体。
//错误 public abstract void eat(){};//错误,抽象方法不能有方法体,即不能带有花括号。 //正确 public abstract void eat(); -
抽象类中可以有构造方法、非抽象方法、抽象方法,也可以什么都没有
//正确 public abstract class Animal { public abstract void eat(); public Animal(){ System.out.println("构造方法"); } public void method(){ System.out.println("普通方法"); } } //正确 public abstract class Animal { } -
含有抽象方法的类必须是抽象类
//错误,包含抽象方法的类必须是抽象类 public class Animal { public abstract void eat(); } //正确 public abstract class Animal { public abstract void eat(); } -
如果一个非抽象类继承了一个抽象类,那么这个类必须重写父类中所有的抽象方法,抽象类则不必。
如下所示,继承关系为:Animal被Dog继承,Dog被SmallDog继承。Animal和Dog都是抽象类,所以即使Dog继承自Animal,也不必要重写Animal的抽象方法,并且由于继承关系,Dog类将拥有eat()方法,即Dog类中的抽象方法有:eat()和sleep();而SmallDog是非抽象类,它必须重写父类中的所有抽象方法,它的父类是Dog,所以必须重写Dog中的抽象方法eat()和sleep()。
public abstract class Animal { public abstract void eat(); } public abstract class Dog extends Animal{ public abstract void sleep(); //由于继承,Dog将拥有eat()方法 } public class SmallDog extends Dog { @Override public void sleep() { } @Override public void eat() { } }
记录学习过程,仅供参考,有错或者叙述不当请指出。
本文详细讲解了Java中抽象类的定义、使用规则,以及抽象方法的声明和继承关系中的具体要求。重点阐述了抽象类不能实例化、抽象方法的特性,以及继承情况下子类如何处理抽象方法。通过实例演示了如何创建和使用抽象类,以及避免常见误区。

被折叠的 条评论
为什么被折叠?



