一 ,抽象类

1、抽象类的核心比喻

抽象类就像一个半成品模板:它定义了一些通用的、已经实现的方法(比如所有动物都会呼吸),但也留下一些 “待实现” 的抽象方法(比如不同动物的叫声不同,只定规则不写具体逻辑),要求子类必须补全这些 “待实现” 的方法才能使用。

2、抽象类的规则

关键字:abstract

不可实例化:抽象类不能直接创建对象,抽象也也有自己的构造方法(abstract

强制实现:子类必须实现所有抽象方法

内容组成:可包含普通方法(有方法体) + 抽象方法abstract修饰,无方法体,只有声明);

3.代码

// 抽象类:动物模板(半成品)
abstract class Animal {
    // 普通方法(已实现,所有动物通用)
    public void breathe() {
        System.out.println("动物呼吸空气");
    }

    // 抽象方法(只定规则,无实现,子类必须补全)
    public abstract void makeSound();
}

// 子类:狗(补全抽象方法)
class Dog extends Animal {
    // 必须重写抽象方法makeSound
    @Override
    public void makeSound() {
        System.out.println("小狗汪汪叫");
    }
}

public class AbstractDemo {
    public static void main(String[] args) {
        // 错误:抽象类不能直接new(注释掉验证)
        // Animal animal = new Animal();
        
        // 正确:实例化子类,向上转型为抽象类类型
        Animal dog = new Dog();
        dog.breathe();       // 调用抽象类的普通方法:动物呼吸空气
        dog.makeSound();     // 调用子类实现的抽象方法:小狗汪汪叫
    }
}

4.匿名类: 

匿名类(匿名子类)是不能有名字的类,它们不能被引用,只能在创建时用new语句来声明它们。

匿名类:   接口/父类 变量名 = new 接口/父类() { 只定义需要使用的方法 }   ;  //  ;

二 .接口

 1.interface

关键字:interface

实现规则:类用implements实现接口,可同时实现多个接口(区别抽象类的单继承);

实例化:不能直接new 接口(),必须由实现类实例化;

子类要求:非抽象实现类必须重写接口中所有抽象方法。

//接口方法的修饰符:不用写public abstract,默认就是,但重写时必须用public

//接口变量:必须赋值(常量),且不能修改(比如Flyable.TYPE = "新类型"会报错);

//多实现:一个类可实现多个接口(如class A implements B,C),弥补 Java 单继承的不足。

// 接口:可飞行的规则(纯契约)
interface Flyable {
    // 抽象方法(默认public abstract,可省略)
    void fly();
    
    // 常量(默认public static final,可省略)
    String TYPE = "飞行工具";
    
    // JDK8+默认方法(有方法体,可选)
    default void showType() {
        System.out.println("类型:" + TYPE);
    }
}

// 实现类1:鸟(遵守Flyable规则)
class Bird implements Flyable {
    // 必须重写抽象方法fly
    @Override
    public void fly() {
        System.out.println("鸟扇动翅膀飞行");
    }
}

// 实现类2:飞机(遵守Flyable规则)
class Plane implements Flyable {
    @Override
    public void fly() {
        System.out.println("飞机靠引擎飞行");
    }
}

public class InterfaceDemo {
    public static void main(String[] args) {
        // 不能直接new接口(注释验证)
        // Flyable f = new Flyable();
        
        // 实例化实现类,向上转型为接口类型
        Flyable bird = new Bird();
        Flyable plane = new Plane();
        
        bird.fly();       // 输出:鸟扇动翅膀飞行
        bird.showType();  // 调用默认方法:类型:飞行工具
        
        plane.fly();      // 输出:飞机靠引擎飞行
    }
}
 

对象与接口对比

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐