Una clase modificada con la palabra clave abstracto se llama un resumen de clase (clase abstracta) . Como:
abstract class A {
abstract int min(int x,int y);
}
El método modificado con la palabra clave abstracta se denomina abstracta método (método abstracto) ,
Para los métodos abstractos , solo se permiten declaraciones, no se permiten implementaciones y no se permite el uso de final y abstract para modificar un método al mismo tiempo, por ejemplo:
abstract int min(int x,int y);
Entender la clase abstracta
( 1 ) Las clases abstractas pueden abstraer estándares de comportamiento importantes , que están representados por métodos abstractos. Es decir, la clase abstracta encapsula los estándares de comportamiento que debe tener la subclase.
( 2 ) El objeto declarado por la clase abstracta puede convertirse en el objeto de transformación superior del objeto de su subclase , llamando al método de anulación de la subclase, es decir, reflejando el comportamiento específico de la subclase según el estándar de comportamiento en la clase abstracta.
abstract class GirlFriend //抽象类封装了两个行为标准
{
abstract void speak();
abstract void cooking();
}
class ChinaGirlFriend extends GirlFriend
{
void speak(){
System.out.println("你好!");
}
void cooking(){
System.out.println("水煮鱼!");
}
}
class AmericanGirlFriend extends GirlFriend
{
void speak(){
System.out.println("hello !");
}
void cooking(){
System.out.println("roast beef!");
}
}
class Boy
{
GirlFriend friend;
void setGirlfriend(GirlFriend f){
friend = f;
}
void showGirlFriend(){
friend.speak();
friend.cooking();
}
}
public class Example5_11
{
public static void main(String args[]){
GirlFriend girl = new ChinaGirlFriend(); //girl是上转型对象
Boy boy = new Boy();
boy.setGirlfriend(girl);
boy.showGirlFriend();
girl = new AmericanGirlFriend();
boy.setGirlfriend(girl);
boy.showGirlFriend();
}
}
abstract class 机动车
{
abstract void 启动();
abstract void 加速();
abstract void 刹车();
}
class 手动挡轿车 extends 机动车
{
void 启动(){
System.out.println("踏下离合器,换到一档。");
System.out.println("然后慢慢抬起离合器。");
}
void 加速(){
System.out.println("踩油门!");
}
void 刹车(){
System.out.println("踏下离合器,踏下刹车板。");
System.out.println("然后将挡位换到一档。");
}
}
class 自动挡轿车 extends 机动车
{
void 启动(){
System.out.println("使用前进档。");
System.out.println("然后轻踩油门。");
}
void 加速(){
System.out.println("踩油门!");
}
void 刹车(){
System.out.println("踏下刹车板。");
}
}
public class Example5_12
{
public static void main(String args[]){
机动车 car = new 手动挡轿车();
System.out.println("手动挡轿车的操作:");
car.启动();
car.加速();
car.刹车();
car = new 自动挡轿车();
System.out.println("自动挡轿车的操作:");
car.启动();
car.加速();
car.刹车();
}
}
Las tres características de los métodos abstractos son las siguientes:
- El método abstracto no tiene cuerpo de método
- El método abstracto debe existir en la clase abstracta
- Cuando la subclase reescribe la clase principal, debe reescribir todos los métodos abstractos de la clase principal.
Nota: No puede usar la modificación privada cuando usa palabras clave abstractas para decorar métodos abstractos, porque los métodos abstractos deben ser reemplazados por subclases, y si se usa una declaración privada, las subclases no pueden ser reemplazadas.
Las reglas de definición y uso de las clases abstractas son las siguientes:
- Tanto las clases abstractas como los métodos abstractos se declaran utilizando la palabra clave abstracta.
- Si un método se declara como abstracto, la clase también debe declararse como abstracta. En una clase abstracta, puede haber 0 ~ n métodos abstractos y 0 ~ n métodos concretos.
- No se pueden crear instancias de clases abstractas, es decir, no se pueden crear objetos con la nueva palabra clave.