又经过了一周的学习,今天对本周学习进行总结 本周学习了Java面向对象进阶内容
抽象类和抽象方法
抽象类
使用abstract关键字声明的类被称为抽象类。抽象类不能被实例化。
抽象方法
使用abstract关键字声明的方法被称为抽象方法。抽象方法没有方法体,即大括号{}内没有代码实现。
抽象方法只能存在于抽象类中,或作为接口的一部分。如果一个类包含了抽象方法,那么这个类也必须被声明为抽象类。
示例
// 定义一个抽象类
abstract class Animal {
// 抽象方法
abstract void eat();
// 非抽象方法
void sleep() {
System.out.println("Animal is sleeping.");
}
}
// 实现抽象类的子类
class Dog extends Animal {
// 必须实现父类的抽象方法
void eat() {
System.out.println("Dog is eating.");
}
// 可以选择重写非抽象方法
void sleep() {
System.out.println("Dog is sleeping soundly.");
}
}
public class TestAbstract {
public static void main(String[] args) {
// 由于Animal是抽象类,不能直接实例化
// 创建Dog类的实例
Dog myDog = new Dog();
// 调用方法
myDog.eat();
myDog.sleep();
}
}
接口
接口是一种引用类型,和类一样,也是一种类型,是由常量、抽象方法组成的特殊类。
接口中的方法默认是public abstract
接口中可以有常量
接口不能被实例化,接口没有构造方法,因为接口代表的是一个规范,不能直接被实例化。
一个类可以实现多个接口,但只能继承一个类
接口与接口之间可以继承
示例
public interface InterfaceName {
// 常量声明
public static final int CONSTANT_NAME = value;
// 抽象方法声明
void method1();
default void defaultMethod() {
// 方法体
}
static void staticMethod() {
// 方法体
}
}
内部类
成员内部类
成员内部类是非静态的,它依赖于外部类的实例。
静态内部类
静态内部类不依赖于外部类的实例,可以在没有外部类实例的情况下创建静态内部类的实例。静态内部类不能访问外部类的非静态成员,但可以访问外部类的静态成员。
局部内部类
局部内部类是定义在方法或作用域内的类。它只能在其定义的作用域内被访问和使用,并且不能包含静态成员。局部内部类可以访问外部类的成员,也可以访问定义它的方法或作用域内的局部变量。
匿名内部类
匿名内部类是没有名称的内部类,它通常用于实现接口或继承其他类。