Java学习笔记06-抽象abstract-接口interface

快速回忆

  1. 抽象类的概念?
  2. abstract的注意事项?
  3. 接口的概念?
  4. 接口的定义
  5. 接口如何实现

知识讲解

6.1 抽象abstract

6.1.1 面向抽象编程

        面向对象编程以对象作为程序的基本单元,面向抽象编程是面向对象编程的一种深化和扩展。

        面向抽象编程强调的是抽象(abstract),即定义一个或多个抽象类并规定一些抽象方法,然后创建这些抽象类的子类,其子类不再继承具体的类,并在子类中提供这些抽象方法的具体实现,即所设计类中的重要数据是抽象类声明的对象,而不是具体类声明的对象。→抽象类只关心设计,而不需要考虑方法的具体实现。

抽象类 具体类声明的对象 = new 抽象类的实现类()

        这种程序设计的核心便是使用上转型对象→多态,即将abstract类声明的对象作为其子类对象的上转型对象,那么这个上转型对象就可以调用子类重写的方法。

6.2.2 abstract类和abstract方法

        abstract关键字可以修饰类和方法,表示抽象类和抽象方法。

6.2.3 抽象方法

        抽象方法是被abstract修饰的方法,特点是只有声明而没有方法体。其子类对象必须重新定义所有的抽象方法,否则将仍作为抽象方法写入子类。

abstract void makeSound()

6.2.4 抽象类

        抽象类是被abstract修饰的类,抽象类不一定含有抽象方法,但含有抽象方法的类一定声明为抽象类,即如果其子类没有实现所有的抽象方法,其子类也是抽象类。特点是抽象类不能进行实例化,我们不能创建抽象类的任何对象。

abstract class Animal{

        ……

        abstract void makeSound()    

        ……

}

6.2.5 抽象abstract的作用

  • 可以将子类的公共属性和不能确认的方法提取到抽象类中,这样子类在继承抽象类的时候就可以直接使用这些公共属性和方法,从而简化了代码的操作。
  • 当我们需要增加新功能时,只需要增加新的子类并实现相应的方法,不会影响到已有的代码。
  • 提高代码的复用性,因为定义的是抽象类或者接口,其实现可以被多个子类继承和复用。

6.2.6 抽象类的使用 

        Dog和Cat作为Animal抽象类的子类必须重新实现抽象方法makeSound(),并且创建的Animal对象拥有各自makeSound()逻辑。

abstract class Animal {
    private String name;

    public Animal(String name) {
        this.name = name;
    }

    public abstract void makeSound();

    public String getName() {
        return name;
    }
}

class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    @Override
    public void makeSound() {
        System.out.println("汪汪汪");
    }
}

class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }

    @Override
    public void makeSound() {
        System.out.println("喵喵喵");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog("旺财");
        Animal cat = new Cat("汤姆");
        dog.makeSound(); // 输出 "汪汪汪"
        cat.makeSound(); // 输出 "喵喵喵"
    }
}

6.2 接口interface

6.2.1 面向接口编程

        面向抽象编程的思想则是在设计类时,不依赖于具体的类,而是面向抽象类。

        面向接口编程指根据提前定义好的接口,通过实现该接口来完成功能的实现。面向接口编程与面向抽象的思想之间的关系是密切的。它们都强调了从高层次的抽象视角来看待问题,而不是深入到具体的实现细节。面向接口编程的思想是面向抽象编程思想更加成熟的发展

6.2.2 接口

        interface,接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法(JDK 9)。

6.2.3 接口声明

        接口的定义,它与定义类方式相似,但是使用 interface 关键字。它也会被编译成.class文件,但一定要明确它并不是类,而是另外一种引用数据类型。

public interface 接口名称 { 

     接口体
    // 抽象方法
    // 默认方法
    // 静态方法 
    // 私有方法 
}

        接口体中由抽象方法和静态常量组成。红色字体允许省略。

public abstract 返回值类型 抽象方法();

public static final 数据类型 常量名 = 常量值;

6.2.4 接口实现implements

        java中继承只能实现单继承,接口可以多实现,一个类可以实现多个接口。

// 定义一个接口
interface Animal {
    // 声明一个抽象方法
    void eat();
}

// 实现Animal接口的类
class Dog implements Animal {
    // 提供eat方法的具体实现
    public void eat() {
        System.out.println("Dog is eating...");
    }
}

// 实现Animal接口的类
class Cat implements Animal {
    // 提供eat方法的具体实现
    public void eat() {
        System.out.println("Cat is eating...");
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建Dog对象并调用其eat方法
        Dog dog = new Dog();
        dog.eat();

        // 创建Cat对象并调用其eat方法
        Cat cat = new Cat();
        cat.eat();
    }
}

                                                                                                   

  • 47
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很好的问题!让我来解答。 首先,让我们来了解一下 `Comparable` 接口。这个接口Java 中的一个接口,它只有一个方法 `compareTo()`。这个方法的作用是定义类的自然排序顺序。 如果我们要对一个对象集合进行排序,只需要让这个类实现 `Comparable` 接口,并且重写 `compareTo()` 方法。这个方法返回一个整型值,表示该对象与另一个对象的大小关系。如果该对象小于另一个对象,则返回负整数;如果两个对象相等,则返回零;如果该对象大于另一个对象,则返回正整数。 下面是一个简单的例子,展示如何使用 `Comparable` 接口进行排序。 ```java public class Student implements Comparable<Student> { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } // 重写 compareTo 方法 @Override public int compareTo(Student o) { // 按照年龄从小到大排序 return this.age - o.getAge(); } } ``` 在这个例子中,我们定义了一个 `Student` 类,并且让它实现了 `Comparable` 接口。我们重写了 `compareTo()` 方法,按照年龄从小到大排序。 现在,我们可以使用 `Collections.sort()` 方法对 `Student` 对象进行排序了: ```java List<Student> students = new ArrayList<>(); students.add(new Student("Tom", 20)); students.add(new Student("Jerry", 18)); students.add(new Student("Alice", 22)); Collections.sort(students); for (Student student : students) { System.out.println(student.getName() + " " + student.getAge()); } ``` 输出结果为: ``` Jerry 18 Tom 20 Alice 22 ``` 可以看到,我们成功地按照年龄从小到大对 `Student` 对象进行了排序。 希望这个例子能够帮助你理解如何使用 `Comparable` 接口进行排序。如果你还有其他问题,请随时提出!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值