抽象类(abstract、extends)
抽象方法
● 抽象方法是一种特殊的方法:它只有声明,而没有具体的实现
● 抽象方法必须用abstract关键字进行修饰
抽象方法是必须写在抽象类当中(当一个类中含有了抽象方法时,那么这个类一定是抽象类)
抽象方法:只有方法的声明,没有方法体,也就是没有具体的实现
抽象方法一般都是定义在一些比较顶级的类当中,抽象方法的作用是说明,我有什么样的方法,而这个方法的具体实现就要靠子类来实现。
抽象类
什么是抽象类
● 如果一个类中没有包含足够的信息来描述一个具体的对象,那么这样的类就是抽象类。
(没有足够的信息)== 抽象方法
● 抽象类除了不能实例化对象之外,类的其他功能都是依然存在的,成员变量、成员方法、和构造方法。
● 用abstract修饰的类就是抽象类。如果某个类中包含有抽象反方法,那么这个类就必须是抽象类。
特点
● 抽象类是不能实例化,但是可以有构造方法,因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。
● 抽象类是只能作为基类的,表示的是一种继承关系。继承抽象类的非抽象类(子类)是必须实现其中的所有抽象方法,而已实现方法的参数,返回值要和抽象类中的方法一样,否则,该类也必须声明为抽象类。
抽象类中是可以没有抽象方法的,有抽象方法一定就是抽象类
比如我定义一个Animal的这样一个类,因为Animal属于一个顶级的类,包括了自然界的所有动物,但是每个动物直接都是有差别的,单说动物吃东西,没有动物都有着不同的吃法,所以我们可以在Animal这个类当中,只说明动物会吃这种现状。具体的实现较给子类再使用
抽象类的意义可以理解为抽象类就是一种设计,针对于一个项目工程来说,肯定不是一个人完成的。
项目设计这呢,由专门的人去实现,项目的实现就由其他专业人完成,而抽象类就是项目设计好了大体架构(功能定义的声明),后面的实现就是继承这个抽象类来完成这个总的项目完成。
子类重写实现即可。
package com.functorone;
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
System.out.println("Animal:" + (dog.a = 10)); //通过继承调用到父类为抽象类的成员变量
dog.eat();
dog.sleep(); //通过继承调用了父类中的方法
}
}
package com.functorone;
//这是一个抽象类
public abstract class Animal {
int a; //抽象类是可以定义成员变量
public Animal() { //抽象类是可以拥有构造方法的,但是不能创建对象
System.out.println("Animal类的无参构造方法");
}
public abstract void eat(); //抽象方法
public void sleep() { //抽象类中是可以写其他方法的
System.out.println("Animal是需要睡觉的");
}
}
package com.functorone;
//Dog类,继承Animal类
//一个类继承了抽象类:1、要么重写抽象类中的所有抽象方法。
// 2、要么以抽象类继承抽象类,继承可以不全部继承的
public class Dog extends Animal {
public Dog() { //创建Dog类的无参构造方法,调用出父类的构造方法
super();
System.out.println("Dog类中的无参构造方法");
}
@Override
public void eat() { //子类继承父类是抽象类的类时,必须全部重写父类的抽象方法
System.out.println("Dog需要吃骨头");
}
}
总结:抽象类,抽象方法。就是在软件开发过程中都是设计层次的概念。也就是说,设计人员会设计出抽象类,抽象方法,程序员都是来继承这些抽象类并覆盖抽象方法,实现具体功能。