抽象类和抽象方法方法
简介
抽象方法是java类中的一个特殊类,为什么要把它称为抽象类?因为抽象类中有抽象方法,但是抽象类中也可以有普通方法
1.用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract修饰一个方法时,这个方法叫做抽象方法。
2.有抽象方法的类必须声明为抽象类,抽象类必须被继承,抽象方法必须被重写。
3.抽象方法秩序声明,不用也不能在抽象方法中实现。
4.抽象类不能被实例化,只能被继承,然后子类实例化。
抽象方法解决的问题
多个有关系的类的共同行为在抽象方法中给出了抽象方法(并非具体的方法)如图形类为抽象类,在图形类中定义了求周长的方法,对于三角形,圆形,矩形他们的求周长的方法不一样,但是他们之间是有联系的,他么都属于图形类。
下面我们来写一个抽象类的实例来实现抽象类的功能:
动物有猫和狗两种,它们都属于动物,猫的种类中有一种蓝猫。动物都有喜欢的做的行为这个共同行为。
我们先写动物的抽象类(Animal类)
package summary;
public abstract class Animal {
public String name;
public Animal(String name) {
this.name = name;
}
public abstract void enjoy();
}
Animal这个抽象类定义了一个抽象的方法:动物都喜欢做的事。
我们现在写猫和狗的类(Dog类和Cat类)
因为Cat下面还有一个blueCat类所以我们将Cat类也定义为抽象类
子类继承父类时,如果这个父类中的所有的抽象方法,子类都能全部重写进行实现的话,那么这个子类就去重写并实现这些抽象方法,如果有子类不能实现的抽象方法,那么将这个子类也声明为抽象类。
package summary;
abstract class Cat extends Animal {
public String eyesColor;
public Cat(String n,String e) {
super(n);
this.eyesColor= e;
// TODO 自动生成的构造函数存根
}
@Override
public void enjoy() {
// TODO 自动生成的方法存根
System.out.println("猫喜欢叫喵喵喵");
}
}
package summary;
public class Dog extends Animal {
public String furColor;
public Dog(String n,String f) {
super(n);
this.furColor =f;
// TODO 自动生成的构造函数存根
}
@Override
public void enjoy() {
// TODO 自动生成的方法存根
System.out.println("狗喜欢叫汪汪汪");
}
}
下面创建测试类来测试我们写的抽象类的功能
public class Test {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Animal d1 = new Dog("狗蛋", "红色");
Animal bluecat =new blueCat("蓝猫","蓝色的眼睛");
d1.enjoy();
bluecat.enjoy();
}
}
输出结果