一、接口简介
Java中的接口及实现类里面关于接口简介: CSDN
二、抽象类简介
1.定义
一种特殊的类,表示一种抽象的概念,不能被实例化,只能被其他类继承。
2.抽象类里面的内容
抽象类除了不能被实例化外,其它方面都和普通Java类相同。
2.1// 常量 public static final double PI = 3.14159;
2.2// 成员变量 protected String name;
2.3// 构造方法 public Animal(String name) { this.name = name; }
2.4// 非抽象方法 public void eat() { System.out.println(name + " is eating."); }
2.5 // 抽象方法 public abstract void sound();
2.6// 嵌套类 public static class NestedClass {
public void nestedMethod() {
}
}
2.7 // 嵌套接口 public interface NestedInterface { void nestedInterfaceMethod(); }
2.8//静态方法 public static void staticMethod() {
System.out.println("This is a static method in abstract class.");
}
2.9 // 静态块 static { System.out.println("This is a static block in abstract class."); }
2.10// 初始化块 { System.out.println("This is an initialization block in abstract class."); }
2.11final方法:final方法是不能被重写的方法。在抽象类中通过final方法阻止子类改变某些方法的行为。
3.抽象类特征
3.1抽象类不能被实例化,只有抽象类的非抽象子类可以创建对象。
3.2如果一个类包含一个或多个抽象方法,那么这个类必须被声明为抽象类。反之,一个抽象类不必包含抽象方法。
3.3抽象类的子类如果不是抽象类,那么必须实现抽象类中的所有抽象方法。否则,这个子类也必须被声明为抽象类
三、接口与抽象类的异同
1.相同点
1.1两者都不可以被实例化
1.2抽象类和接口都是实现抽象化和多态性的重要手段
2.不同点
2.1针对里面的内容:抽象类除了不能被实例化,里面包含的和普通类(常量、成员变量、成员方法等)一样
接口中只能包含静态常量(即 public static final)、方法的声明(而非实现)以及内部定义的其他类型(如枚举类型或内部类)
2.2针对抽象方法:抽象类可以包含非抽象方法,而 interface 中的所有方法都默认为抽象方法(Java8新增静态方法默认方法)。
2.3
维度 | 抽象类 | 接口 |
常量 | 与普通类一致 | 只有静态常量(public static final) |
方法 | 与普通类一致 | 只有抽象方法(jdk8新增静态方法默认方法) |
访问修饰符 | 与普通类一致 | 只有public |
实现方式 | 一个类只能继承一个 abstract class | 可以实现多个 interface |
目的 | 作为其他类的基类 | 描述一个对象可以做什么 |
应用场景 | 一个类需要实现一个通用的方法,并且还需要拥有一些具体的方法和属性,它应该继承一个抽象类。 | 一个类需要实现多个不同的方法,它应该实现多个接口。 |
基本概念
1.构造方法
1.1定义
在Java中,构造方法是一种特殊的方法,用于在创建对象时初始化对象,即为新创建的对象分配内存,并包含对新对象必要的初始化。
1.2构造方法的主要特点
1.2.1方法名:构造方法的名称必须与类名完全相同,甚至包括大小写。
1.2.2返回值:构造方法没有任何返回类型,包括void。因此不能在构造方法中使用return语句。
1.2.3构造方法不能被final、static、synchronized、abstract和native修饰。它默认为public,如果不希望外部直接通过new来调用,可以设置为protected或私有。
1.2.4如果没有定义构造方法,编译器会为我们提供一个默认的构造方法。这个构造方法是无参数的,如果我们定义了构造方法,编译器就不会提供默认的构造方法了。
1.2.5构造方法可以重载,即一个类可以定义多个构造方法。
2.抽象方法
2.1抽象方法是一种只有声明没有具体实现的方法。这种方法通常存在于抽象类或接口中。
2.2抽象方法的主要特点
2.2.1抽象方法使用关键字abstract
进行声明。
2.2.2抽象方法只有方法签名,没有方法体。
2.2.3抽象方法的存在主要是为了被子类或实现类重写,以实现具体的功能。
2.2.4抽象方法不能是静态的,因为静态方法不能被重写。但是,抽象方法可以是公有的、保护的或默认的。
public abstract class AbstractClass {
public abstract void abstractMethod();
}
在这个例子中,abstractMethod
就是一个抽象方法,它在AbstractClass
抽象类中被声明,但是没有被实现。这个方法需要在AbstractClass
的子类中被重写。