抽象类入门
抽象类:被abstract修饰的类,抽象类一般都是设计为父类!
注意:当一个类继承了抽象父类时,语法要求必须重写父类中的所有抽象方法。
抽象方法:没有方法体的方法。
//抽象类
public abstract class TuXing {
public abstract void getArea();
}
//注意:当一个类继承了抽象父类时,语法要求必须重写父类中所有抽象方法
class JuXing extends TuXing {
public void getArea() {
System.out.println("矩形面积长乘高");
}
}
抽象类的注意事项:
1、抽象类不能创建对象。
2、抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类。
3、抽象类有构造方法!——Java语法中只要是class就一定有构造。
为什么抽象类有构造方法:因为抽象类一般都是设计为父类,父类一定有子类,如果没有构造方法子类如何访问父类呢。
4、抽象类的子类有两种:
1、积极的子类:重写父类所有抽象方法。
2、消极的子类:继续沿用父类抽象方法,自身也继续抽象。
Eg:
- 案例需求 定义猫类(Cat)和狗类(Dog) 猫类成员方法:eat(猫吃鱼)drink(喝水…) 狗类成员方法:eat(狗吃肉)drink(喝水…)
- 实现步骤
- 猫类和狗类中存在共性内容,应向上抽取出一个动物类(Animal)
- 父类Animal中,无法将 eat 方法具体实现描述清楚,所以定义为抽象方法
- 抽象方法需要存活在抽象类中,将Animal定义为抽象类
- 让 Cat 和 Dog 分别继承 Animal,重写eat方法
- 测试类中创建 Cat 和 Dog 对象,调用方法测试
- 代码实现
//动物类
public abstract class Animal {
public void drink(){
System.out.println("喝水");
}
public Animal(){
}
public abstract void eat();
}
//猫类
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
//狗类
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗吃肉");
}
}
//测试类
public static void main(String[] args) {
Dog d = new Dog();
d.eat();
d.drink();
Cat c = new Cat();
c.drink();
c.eat();
//Animal a = new Animal();
//a.eat();
}
抽象类的使用场景
1、保证能看懂源码
2、设计模式: 一些上乘的编码套路。(一共23种设计模式,常用的8种!)
–模板模式
总结:固定的内容写在模板中,变化的内容设计为抽象方法,由不同的子类给出不同的实现!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。