面向对象 - 抽象类、接口、内部类

继续深入认识面向对象

狂神说Java BV12J41137hu

抽象类

理解为模板类,它不能实例化对象,它的某些方法没有具体的实现,需要继承类进行实现;

  • 它可以被抽象类继承,此时方法不需要补全重写;

  • 它可以被普通的类继承,此时方法必须要补全重写;

案例:

抽象父类 Action.java

package oop.app.abstractaction;

public abstract class Action {
    public abstract void doSomething(); // 抽象方法
}

普通类 NewAction.java

package oop.app.abstractaction;

public class NewAction extends Action{
    @Override // 必须重写抽象方法
    public void doSomething() {

    }
}

抽象子类 NewNewAction.java

package oop.app.abstractaction;

public abstract class NewNewAction extends Action{
}

特点

  • 不能 new
  • 只能靠子类去实现它
  • 抽象方法只能在抽象类中定义
  • 抽象类中可以定义普通方法

思考

  1. 抽象类是否存在构造器?
    • 存在的
  2. 抽象类存在的意义?
    • 提高开发效率

类和接口的一个区别*

类只能单继承;

接口可以多继承;

接口

Interface

类和接口的特点

名称 特点 声明
普通类 只有具体实现 class
抽象类 具体实现和规范(抽象方法)都有 class abstract
接口 只有规范,无法写方法 interface

接口的特点

  • 接口只能实现约束,相较于抽象类,接口剥离了实现,只面向约束

  • 接口中所有的定义都是抽象的

    • 因此接口中的方法 修饰关键字 不写默认就是 public abstract
  • 接口都需要有实现类(类名应以 Impl 结尾)

    • 实现了接口的类需要重写接口中的方法
    • 一个类当然可以实现多个接口
  • 接口中也是可以定义常量的,当然声明时也不写前缀,默认是 public static final

案例

接口1 UserService.java

package oop.app.myinterface;

public interface UserService {
    void getUserName();
}

接口2 MoneyService.java

package oop.app.myinterface;

public interface MoneyService {
    int minMoney = 0; // 接口内可以定义常量
    void getMoneyAmount();
}

实现方法 MyInterfaceIml.java

package oop.app.myinterface;

public class MyInterfaceIml implements UserService, MoneyService {
    @Override
    public void getMoneyAmount() {

    }

    @Override
    public void getUserName() {

    }
}

作用

  1. 约束

  2. 定义一些方法,让不同的人分别去实现

  3. 默认方法都是 public abstract

  4. 常量都是 public static final

  5. 接口不能直接被实例化

    • 接口中没有构造方法

    • 接口可以实现多个

  6. 实现接口必须要重写方法

内部类

java提高篇(八)----详解内部类

写的很详细!

  1. 成员内部类 - 在public class 中声明的 class

  2. 静态内部类 - 在java文件中,public class 外部声明的 class

  3. 局部内部类 - 在public class 中的方法中,声明的class ,不用将实例保存到变量中,用完就扔

// 一个java文件中,可以由多个 class ,但是只能有一个 public class

posted @ 2021-12-15 22:13  jentreywang  阅读(36)  评论(0)    收藏  举报