抽象类和接口

目录

 抽象类

1、 概念

2 、特点

3 、示例代码

 接口

1、 概念

2 、特点

3 、示例代码

 抽象类和接口

1、 相同点

2、 不同点

3、 如何选择

综合案例


 抽象类

1、 概念

抽象类是一种不能实例化的类,它只能作为其他类的父类来使用。它的主要作用是定义类的模板和规范,提供一个公共的接口供子类实现。抽象类通过使用abstract关键字来声明,并且可以包含抽象方法和非抽象方法。

2 、特点

  • 抽象类不能被实例化,只能被继承。

  • 抽象类可以包含抽象方法和非抽象方法。

  • 抽象方法只有声明而没有实现,子类必须实现抽象方法。

  • 如果一个类继承了抽象类,那么它必须实现所有抽象方法,或者自己也声明为抽象类。

3 、示例代码

// 抽象类
abstract class Animal {
    abstract void eat(); // 抽象方法

    void sleep() {
        System.out.println("动物在睡觉");
    }
}

// 子类实现抽象类
class Dog extends Animal {
    @Override
    void eat() {
        System.out.println("狗在吃东西");
    }
}

// 测试类
public class AbstractClassExample {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();
        dog.sleep();
    }
}

输出结果:

狗在吃东西
动物在睡觉

 接口

1、 概念

接口是一种定义类的行为和功能的规范。它类似于抽象类,但是只能包含常量和抽象方法,不能包含实例变量和非抽象方法。接口通过使用interface关键字来声明,并且可以被类实现(使用关键字implements)。

2 、特点

  • 接口不能被实例化,只能被类实现。

  • 接口只能包含常量和抽象方法,不能包含实例变量和非抽象方法。

  • 类实现接口时,必须实现接口中的所有抽象方法。

  • 类可以实现多个接口,实现多继承的效果。

3 、示例代码

// 接口
interface Animal {
    void eat(); // 抽象方法

    void sleep(); // 抽象方法
}

// 实现接口的类
class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("狗在吃东西");
    }

    @Override
    public void sleep() {
        System.out.println("狗在睡觉");
    }
}

// 测试类
public class InterfaceExample {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();
        dog.sleep();
    }
}

输出结果:

狗在吃东西
狗在睡觉

 抽象类和接口

1、 相同点

  • 都是用于定义类的模板和规范。

  • 都不能被实例化,只能被继承或实现。

  • 都可以包含抽象方法。

  • 都可以被子类继承或实现,并且必须实现抽象方法。

2、 不同点

  • 抽象类可以包含非抽象方法,而接口只能包含抽象方法和常量。

  • 类只能继承一个抽象类,但是可以实现多个接口。

  • 抽象类提供了一种代码复用的机制,而接口提供了一种多继承的方式。

3、 如何选择

如果需要定义类的模板,并且希望提供一些默认的实现,可以使用抽象类。如果需要定义类的行为规范,并且希望实现多继承的效果,可以使用接口。在设计代码时,根据具体的需求和设计原则来选择使用抽象类还是接口。

综合案例



public abstract class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
public abstract class Coach extends Person{
    public Coach() {
        super();
    }

    public Coach(String name, int age) {
        super(name, age);
    }
    public abstract void action();
}


public class BasketballCoach extends Coach{
    public BasketballCoach() {
        super();
    }

    public BasketballCoach(String name, int age) {
        super(name, age);
    }

    @Override
    public void action() {
        System.out.println("教篮球");
    }
}

public class PingpongCoach extends Coach implements SpeakingEnglish{
    public PingpongCoach() {
        super();
    }

    public PingpongCoach(String name, int age) {
        super(name, age);
    }

    @Override
    public void action() {
        System.out.println("教乒乓球");
    }

    @Override
    public void speakingEnglish() {
        System.out.println("学英语");
    }
}




import com.self.test.polymophic.Animal;

public abstract class Sportsmen extends Person{
    public Sportsmen() {
        super();
    }

    public Sportsmen(String name, int age) {
        super(name, age);
    }
    public abstract void action();
}


public class Basketball extends Sportsmen{
    public Basketball() {
        super();
    }

    public Basketball(String name, int age) {
        super(name, age);
    }

    @Override
    public void action() {
        System.out.println("打篮球");
    }
}


public class Pingpong extends Sportsmen implements SpeakingEnglish{
    public Pingpong() {
        super();
    }

    public Pingpong(String name, int age) {
        super(name, age);
    }

    @Override
    public void action() {
        System.out.println("打乒乓球");
    }

    @Override
    public void speakingEnglish() {
        System.out.println("学英语");
    }
}



public interface SpeakingEnglish {
    void speakingEnglish();
}


public class Test {
    public static void main(String[] args) {
        Pingpong per = new Pingpong("XX",20);
        System.out.println(per.getName() + "," + per.getAge());
        per.action();
        per.speakingEnglish();
    }
}

相关推荐

  1. 接口抽象

    2024-03-28 11:18:03       43 阅读
  2. 抽象接口

    2024-03-28 11:18:03       33 阅读
  3. 接口抽象内部

    2024-03-28 11:18:03       21 阅读
  4. 接口抽象的区别

    2024-03-28 11:18:03       22 阅读
  5. 接口抽象有什么区别?

    2024-03-28 11:18:03       19 阅读
  6. 接口抽象:如何使用普通模拟接口抽象

    2024-03-28 11:18:03       10 阅读
  7. C# 抽象接口

    2024-03-28 11:18:03       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-28 11:18:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-28 11:18:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-28 11:18:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-28 11:18:03       20 阅读

热门阅读

  1. Linux系统账号文件

    2024-03-28 11:18:03       18 阅读
  2. axios配置以及说明

    2024-03-28 11:18:03       19 阅读
  3. Flutter 绘制原理

    2024-03-28 11:18:03       20 阅读
  4. 数据结构奇妙旅程之深入解析希尔排序

    2024-03-28 11:18:03       18 阅读
  5. Unity DOTS系列之IJobChunk来迭代处理数据

    2024-03-28 11:18:03       24 阅读