所谓的抽象类
,其实就是一种概念,只不过这种概念需要我们用Java编程语言将其表达出来而已。 就好比汽车中的概念汽车
,它只存在于一张图片、一个视频中,我们并不能看到它的实体,但通过这种概念
,就可以造出实际的汽车,故概念汽车
不能New出对象,等等。
以上用“概念汽车”来类比“抽象类”,由此更加快速地理解抽象中的各个特性。
抽象类语法格式:
abstract class 类名 {
···
}
抽象类的特性
抽象类特点:
- 抽象类
不能实例化 (new)
- 有抽象方法的类,一定是抽象类
- 抽象类中
可以没有抽象方法
,即可以包含抽象方法和非抽象方法 - 任何继承抽象类的子类必须
实现
父类的所有
抽象方法,除非该子类也是抽象类。
抽象类的成员特点:
- 成员变量
- 可以有成员变量
- 可以有常量
- 成员方法
- 可以有抽象方法
- 可以有非抽象方法
- 构造方法
- 可以有构造方法的,需要对抽象类的成员变量进行初始化
//验证抽象类的特点
abstract class Animal {
String name = "哮天犬"; //成员变量
final int num = 10; //成员常量
public Animal() { //构造方法
System.out.println("我是抽象类的构造方法");
}
public abstract void eat(); //抽象方法
public void run() {} //非抽象方法(此方法时空实现)
}
class Dog extends Animal {
public void barking() {
System.out.println(name);
System.out.println(num);
}
@Override
public void eat() {
//空实现也是实现
}
}
public class Main {
public static void main(String[] args) {
Dog d = new Dog();
d.barking();
}
}
/*输出:
我是抽象类的构造方法
哮天犬
10
*/
抽象方法的特性
语法格式:
public abstract 返回值类型 方法名(参数);
abstract不能与以下关键字共同修饰一个方法:
- abstract
不能与private
共同修饰一个方法。 - abstract
不能与static
共同修饰一个方法。 - abstract
不能与final
共同修饰一个方法。
抽象方法特性:
- 抽象方法
没有方法体({})
,抽象方法不能被声明成 final 和 static
权限修饰符 abstract 返回值类型 方法名 ( );
例如:public abstract void eat();
- 只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。
快速理解抽象方法的使用:
//研发部员工
abstract class Developer {
public abstract void work();//抽象函数。需要abstract修饰,并分号;结束
}
//JavaEE工程师
class JavaEE extends Developer{
public void work() {
System.out.println("正在研发淘宝网站");
}
}
//Android工程师
class Android extends Developer {
public void work() {
System.out.println("正在研发淘宝手机客户端软件");
}
}
//测试类
public class Main {
public static void main(String[] args) {
JavaEE ee = new JavaEE();
ee.work();
Android an = new Android();
an.work();
}
}
来源:CSDN
作者:多重人格递归
链接:https://blog.csdn.net/ComputerGeekHack/article/details/104118289