前言
上文在讲述接口的时候提到了抽象类,那么这篇文章就讲述一下抽象类的概念。
Java中抽象类是一种特殊的类,不能直接实例化,只能被用作其他类的父类被继承 。抽象类通过使用关键字“abstract”来定义。
public abstract class 类名{
}
抽象类是作为父类的。抽象类包含非抽象类所有的东西: 属性, 方法, 抽象方法。
抽象类主要用于定义一些通用的属性和方法,它可以被子类继承并实现抽象方法。子类必须实现抽象类中的所有抽象方法,否则子类也必须声明为抽象类。
抽象类可以包含普通的方法和变量,可以有构造方法,可以有静态方法和静态变量。抽象类可以拥有自己的成员变量和成员方法,也可以继承其他类或实现接口。这一点是与接口不一样的,接口只能有常量和抽象方法。
在抽象类中,定义方法的签名,子类继承实现方法体。
如下案例:
定义一个抽象类父类为Pet,宠物类,其中包括一个showInfo方法和eat抽象方法
public abstract class Pet {
public void showInfo(){
System.out.println("宠物自白:");
System.out.print("我的名字叫"+this.name
+",健康值是"+this.health+",和主人的亲密度是"+this.love);
}
public abstract void eat(String food);
}
再定义一个子类,名字叫Dog,Dog类继承Pet抽象类,重写showInfo方法,因为继承了Pet抽象类,所以要实现eat方法。
public class Dog extends Pet{
@Override
public void showInfo() {
super.showInfo();
System.out.println("我是一只"+this.type+"狗");
}
@Override
public void eat(String food) {
System.out.println("投喂"+food);
}
}
抽象方法在抽象类父类中定义方法的签名,在子类中实现。
如下:eat就是就是一个抽象方法,Pet是抽象类,就是所谓的父类。
public abstract class Pet {
public abstract void eat(String food);
}
在Dog类中继承Pet类,Dog就是子类,子类必须实现父类定义的抽象方法。
public class Dog extends Pet{
@Override
public void eat(String food) {
System.out.println("投喂"+food);
}
}
抽象方法也使用关键字“abstract”来定义。
抽象方法没有方法体, 无法调用, 作用:只能被子类重写。
子类继承一个类, 这个类包含抽象方法:
子类重写抽象方法
如果子类不想重写, 把子类变成抽象类
如下:Penguin抽象类继承了Pet抽象类,但是Penguin可以不重写eat方法。
public abstract class Penguin extends Pet{
}
一个类包含抽象方法, 这个类必须变成抽象类。
一个类是抽象类, 这个类不是必须包含抽象方法。
抽象类,并不是一定包含抽象方法,但是包含抽象方法的一定是抽象类。
属性
非抽象方法
抽象方法
构造方法
抽象方法不能使用static修饰。抽象方法必须被子类实现,而static方法是属于类而不是实例的,无法在子类中进行重写或实现。因此,抽象方法和static修饰符是互斥的,不能同时使用。
抽象方法不能使用private修饰符。抽象方法必须被子类实现或者覆写,在父类中声明为抽象的方法是为了让子类必须实现该方法。私有方法是不能被子类访问或覆写的,因此不允许使用private修饰抽象方法。
以上就是今天要讲的内容,本文仅仅简单介绍了抽象类和抽象方法的内容,更多的需要自己在代码中实践。