文章目录
抽象类(abstract)
概念
如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。简单来说就是类中的信息太少了描述不了一个具体的”东西“,这就是抽象类。
抽象类不能实例化,但类的其它功能依旧存在,
成员变量、成员方法和构造方法
的访问方式和普通类一样。
具体描述
1.用
abstract
修饰的类就是抽象类。
2.若某个类中包含有抽象方法,那么该类就必须定义成抽象类。
3.抽象方法
抽象方法是一种特殊的方法:它只有声明,没有具体的实现;
抽象方法必须使用abstract关键字进行修饰。
4.抽象类可以有成员属性和非抽象的成员方法。
5.抽象类不能有被实例化,但
可以有构造函数,因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。
6.抽象类只能用作基类,表示一种继承关系。
继承抽象类的非抽象类必须实现其中的所有非抽象方法
,对于已经实现的的方法的参数、返回值必须要和抽象类中的方法一致。否则,
该类也必须声明为抽象类
。
7.构造方法和静态方法不可以修饰为abstract。
抽象类的使用
使用关键字abstract定义抽象类,一般语法为:
/*
[访问权限] abstract class 类名{
成员列表
}
*/
public abstract class Shapes{
public abstract void draw();
}
public abstract class Shapes{
public void draw(){
//具体代码
}
}
代码示例—–抽象类
/*
* 一个类中有方法是抽象方法,这个类也会变成一个抽象类
* 一个抽象类会有 0-n 个抽象方法
*/
public abstract class Person {
//在一个类中,会有一类方法,子类对这个方法非常满意,无需重写,直接就可以使用...
public void eat(){
System.out.println("每天都要吃饭饭!!!!");
}
/*
* 在一个类中,会有一类方法,子类对这种方法永远都不满意,会对这种方法进行重写;
* 把一个方法的方法体去掉,然后被abstract修饰,那么这个方法就变成了一个抽象方法;*/
public abstract void say();
public abstract void love();
}
代码示例—继承抽象类的子类
/*
* 抽象类被其它类继承
* 抽象类被继承后必须对其中的抽象方法进行重写,否则就需要被abstract修饰为抽象类
* 但是一般子类不会加abstract修饰
* 一个类继承一个抽象类,那么这个类会变成一个抽象类
*
*/
public class Chinese extends Person {
@Override
public void say() {
System.out.println("中国人说中国话!!!");
}
@Override
public void love() {
System.out.println("中国人民爱中国共产党!!!!");
}
}
代码示例—-测试
public class Test {
public static void main(String[] args) {
//抽象类不可以创建对象
// Person person = new Person();
//子类可以创建
Chinese chinese = new Chinese();
chinese.eat();
chinese.love();
chinese.say();
}
}
需要注意的几个问题:
1.抽象类不能创建,那么抽象类中是否有构造器?
答:抽象类中有构造器。构造器的作用:给子类初始化对象时需要先用super调用父类的构造器。
2.抽象类是否能够被final修饰?
答:不能被final修饰,因为抽象类设计的初衷就是给子类继承重写用的,如果被final修饰了,就不能被子类继承了,那抹抽象类的意义就没有了。