Java抽象类 就是把具有相同特性的事物归为一个抽象类
概念
- 抽象类不能直接实例化对象。(即不能new一个新对象)
- 抽象类一般包括一个或几个抽象方法,抽象方法就是abstract修饰的方法。
- 抽象方法只有方法名,没有方法体。(就好比一个模板)
- 抽象类的子类必须重写父类的抽象方法(重写写入方法体)子类才能真正实例化,否则子类也是一个抽象类。
- 抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类
笔者个人见解:
比如水果是总称,我们可以定义一个苹果类、定义一个西瓜类。
然后我们实例化一个苹果对象,实例化一个西瓜对象
我们可以定义一个水果类,但我们无法实例化一个水果对象???
因为水果是总称啊,无法判断我们说的是哪一种水果
这时,水果类就是一个抽象类(就像是一种“模板”)
水果类可以被苹果类继承扩展,也可以被西瓜类继承扩展
抽象类的定义形式:
一般格式如下:
abstract class 类名 {
类体
}
举例://Dog类继承于抽象类Animal。
abstract class Animal{ //抽象类 Animal 动物
String name; //属性名字
Animal(String name){ //普通方法,传名字参数
this.name=name;
}
void getname(){ //普通方法,获取并输出名字参数
System.out.println("Animal's nameis"+ name);
}
Abstract void move() //抽象方法abstract修饰。只声明move方法,但是无方法体!
}
class Dog extends Animal { //狗类 继承 抽象 动物类
int age; //属性 年龄
Dog(String name,int age){ //狗狗 构造方法
super(name); //调用父系name方法
this.age=age; //把传入age参数赋值当前age
}
void getage(){ //获取age方法,获取并输出age参数
System.out.println("Dogis"+ age +"years old");
}
void move(){ //重写父系move方法(写入方法体)(不重写无法实例)
System.out.println(name +" can run");
}
}
Public class AbstractDemo{
public static void main(String args[]){
Dog d=newDog("汪小白",5);
d.getname(); //父系getname方法
d.getage(); //自己的getage方法
d.move(); //自己重写的move方法
}
}
程序运行结果:
Animal's name is 汪小白
Dog is 5 years old
汪小白 can run