Java:抽象类和接口(1)
一 抽象类
1.什么是抽象类
在 Java SE 中,抽象类是一种用于为其他类提供通用行为的类。它允许你定义一组方法和字段,而具体的实现留给子类来完成。抽象类不能被实例化,必须通过继承它的子类来实现其抽象方法并进行实例化。
public abstract class Shape {public abstract void draw();}
public class Cycle extends Shape{public void draw(){System.out.println("画一个圆。。。。。。。");}
}
public class Flower extends Shape{public void draw(){System.out.println("画一朵花.。。。。。。。");}
}
public class Test {public static void main(String[] args) {Cycle cycle=new Cycle();Flower flower =new Flower();Shape[] shapes={cycle,flower,cycle,cycle,flower};for (Shape s:shapes) {s.draw();}// Shape shape=new Shape();//Shape shape=new Cycle();}}
2.抽象类的定义
使用 abstract
关键字定义一个类为抽象类。抽象类可以包含抽象方法(没有方法体的方法)和非抽象方法(普通方法),但它们不能直接被实例化。
public abstract class Shape {
abstract class Shape {// 抽象方法(没有方法体)public abstract void draw();// 具体方法(有实现)public void move() {System.out.println("Moving the shape");}
}
3.抽象方法
抽象方法只有方法的签名,没有具体的实现。它们在抽象类中声明,但必须由子类提供实现。
父类的抽象方法
public abstract class Shape {public abstract void draw();}
在子类中具体实现
public class Cycle extends Shape{public void draw(){System.out.println("画一个圆。。。。。。。");}
}
public class Flower extends Shape{public void draw(){System.out.println("画一朵花.。。。。。。。");}
}
抽象方法的特点:
- 抽象方法必须在抽象类中声明。
- 子类必须实现所有的抽象方法,除非子类本身也是抽象类。
- 抽象方法不能有方法体(没有大括号和具体的实现代码)。
注:如果子类也是抽象方法,则在子类的子类中实现,欠下的总是要还的。
public abstract class Shape {public abstract void draw();}abstract class A extends Shape{public abstract void drink();
}class B extends A{public void draw(){System.out.println("画画");}public void drink(){System.out.println("喝水");}
}
4. 抽象类的特点
- 不能实例化:抽象类不能直接创建对象。例如,
Shape shape = new Shape();
是不合法的,因为抽象类无法实例化。 - 可以包含具体方法:抽象类不仅可以包含抽象方法,还可以包含具体方法,即有实现的方法。
- 可以包含字段:抽象类可以像普通类一样包含成员变量(字段)。
- 可以有构造器:尽管抽象类不能被实例化,但它可以有构造器,供子类调用。
注:抽象类可以有抽象方法和普通方法,但是普通类只能有普通方法不能有抽象方法。
总结:
- 如果一个类中有抽象方法,那么这个类必定是抽象类
- 抽象类的抽象方法可以没有具体实现,在子类中实现
- 抽象类的出现就是为了被继承的
- 抽象类不能被实例化,它的目的是为其他类提供基础和模板。
- 抽象类可以包含字段、构造器、具体方法等元素,使得它比接口更灵活。
希望能对大家有所帮助!!!!!