一、抽象类定义
使用关键字abstract修饰的类称为抽象类
public abstract class Student
{
}
二、抽象方法定义:
1. 使用关键字abstract修饰的方法称为抽象方法,
2.抽象方法只有方法签名,没有方法体,方法体就是指{}
/**
* 抽象方法
*/
public abstract void test2(String name);
三、抽象类属性
属性和正常类定义一样,没有抽象属性一说
四、抽象类的特点
1、含有抽象方法的类一定是抽象类,抽象类不一定含有抽象方法(但是如果没有抽象方法,那么设置抽象类将毫无意义)
2、抽象类不能实例化,即不能用new实例化对象
3、若某类继承抽象类,那么必须重写抽象类的所有抽象方法,否则就要定义为抽象类
4、继承抽象类的构造方法和继承普通类的构造方法一致
五、为什么要用抽象类
1.设置抽象方法
2.保证抽象方法一定被子类重写进而实现不同功能
举例说明:
1.人是一个类,拥有一个eat方法,亚洲人,非洲人,欧洲人是其子类,那么就都有eat方法
2.亚洲人用筷子吃饭、欧洲人用叉子吃饭、非洲人用手吃饭,实现内容是不一样的
People类
/**
* 类--人
*
* @author Administrator
*
*/
public class People
{
/**
* 吃饭的方法
*/
public void eat()
{
System.out.println("这是一个吃饭的方法");
}
}
亚洲人类:
/**
* 亚洲人类
* @author Administrator
*
*/
public class AsiaPeople extends People
{
@Override
public void eat()
{
System.out.println("亚洲人用筷子吃饭");
}
}
欧洲人类:
/**
* 欧洲人类
* @author Administrator
*
*/
public class EuropePeople extends People
{
@Override
public void eat()
{
System.out.println("欧洲人用叉子吃饭");
}
}
非洲人类:
/**
* 非洲人类
* @author Administrator
*
*/
public class AfricaPeople extends People
{
}
3.这个时候定义AfricaPeople类的时候,假设我忘记了重写eat这个方法,那么会导致AfricaPeople的eat方法没有实现我们要求的功能,调用eat方法时会调用父类People的方法
4.为了避免出现这类失误,我们给People类的eat方法加上abstract修饰,使的People类称为抽象类
5.那么AfricaPeople类就必须要重写eat方法,保证了功能的扩展
修改后的People类:
/**
* 类--人
*
* @author Administrator
*
*/
public abstract class People
{
/**
* 吃饭的方法
*/
public abstract void eat();
}
修改后的AfricaPeople类:
/**
* 非洲人类
* @author Administrator
*
*/
public class AfricaPeople extends People
{
@Override
public void eat()
{
System.out.println("非洲人用手吃饭");
}
}