抽象类
1、abstract修饰符
abstract修饰符可以修饰类、方法
2、abstract修饰方法
即抽象方法
抽象方法的特点
例如:
public void test(){}
public void test();
public abstract void test();
3、abstract修饰类
即抽象类 如下:
public abstract class Action{
}
3.1 抽象类和非抽象类的区别
- 抽象类使用了abstract修饰符
- 抽象类中可以编写抽象方法,非抽象类中不行
- 抽象类不能进行实例化创建对象,非抽象类可以实例化创建对象
3.2 抽象类和抽象方法的关系
- 抽象类中可以没有抽象方法(意味着可以有普通方法)
- 有抽象方法的类必须定义为抽象类
??问题1?? 为什么要定义抽象类 答:父类中的方法如果被子类们重写,并且子类的实现各不相同,则父类中的实现毫无意义,只剩下父类方法的声明还有意义,这个时候,可以把父类中的方法定义为抽象方法,即被abstract修饰,只有方法的声明,没有方法的主体实现。
例如下面的代码 父类Animal
public abstract class Animal {
public void eat() {};
}
两个子类Cat和Dog
public class Dog extends Animal{
public void eat() {
System.out.println("狗爱吃骨头。。。");
}
}
public class Cat extends Animal{
public void eat() {
System.out.println("猫爱吃鱼。。。");
}
}
实现类
public class Demo {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat();
Cat cat = new Cat();
cat.eat();
}
}
??问题2?? 既然抽象类不能被实例化创建对象,那么这个类有什么用? 答: 抽象类的主要作用是用来被子类继承的,子类继承抽象类,实现抽象类中的抽象方法
??问题3?? 抽象类不实例化创建对象,那么抽象类中是否有构造器? 答: 有构造器,这个构造器是让子类调用的,子类继承父类,子类创建对象的时候,会先调用父类的构造器
??问题4?? 子类继承抽象父类,子类是否可以不实现父类中的抽象方法? 答: 简单来说就是将子类也定义为抽象类。----下面的更详细 可以不实现父类中的抽象方法。子类继承抽象父类,子类可以选择实现父类中所有的抽象方法,如果有任何一个抽象方法没有被子类实现,那么这个子类也要将自己声明为抽象类,那么这个子类也就只能等待,再来一个子类继承自己,去实现剩余没有实现的抽象方法,直到所有抽象方法都被实现为止。
|