抽象类的概念
简介:抽象类一般是用于继承的父类,里面包含了抽像的方法。
抽象类是一个抽象的类,那什么是抽象呢?在java中抽象指的是把像的部分抽出来,而抽象类就是把一个类像的部分抽出来,抽象类里独特的特征就是拥有抽像方法,在java中使用abstract来表示这是一个抽象的类或者方法,抽象的方法是有语句体的如:
//抽象类
public abstract class Tang{
//抽像方法
abstract void print();
}
注意:有抽象方法的类必然是抽象类,但抽象类可以没有抽象方法.
抽象类的用法
基础语法:
抽象类中的抽象放法没有方法体所以不能用static修饰,且如果子类继承抽象类,必须实现抽象类中的所有抽象方法如:
public abstract class People{
//一个抽象方法
public abstract void sleep();
}
class Student extends People{
@Override
public void sleep() { //强制要求重写抽象方法
System.out.println("早睡早起");
}
}
这里可以看到抽象的方法一定是要被子类重写的,包括类是一定要被继承的否则抽象类就没有意义了,所以不管是抽象方法还是抽象类都不能使用final去修饰.
实例化抽象类
抽象类是不可以被直接去实例化的如:
因为抽象类中的抽象方法是没有方法体的所以不能直接实例化,那我们只要实现了抽象方法就可以实例化抽象类了,那实例化抽象类的方法有两种:实现抽象方法的子类像上转型,或者实例对象时直接重写抽象方法:
子类向上转型:
public abstract class People{
//一个抽象方法
public abstract void sleep();
}
class Student extends People{
@Override
public void sleep() { //强制要求重写抽象方法
System.out.println("早睡早起");
}
}
class Test{
public static void main(String[] args) {
People people=new Student();
people.sleep();
}
}
这里可以运用多态所学的知识,通过向上转型来去间接的实例化抽象方法.
对象重写抽象方法:
public abstract class People{
//一个抽象方法
public abstract void sleep();
}
class Test{
public static void main(String[] args) {
People people=new People() {
@Override
public void sleep() {
System.out.println("好好睡觉");
}
};
people.sleep();
}
}
这样写会极大的降低代码的复用性不推荐,建议使用第一种.
抽象类中构造器存在吗?
在抽象类中构造器是存在的,因为抽象类其实之比普通的类多了一个抽象的方法其他的组织基本都是一样的,可以有普通方法,成员变量,所以构造器是存在的
public abstract class People{
public People(){
System.out.println("平平无奇的构造器");
}
//一个抽象方法
public abstract void sleep();
}