面向对象 - 抽象类、接口、内部类
继续深入认识面向对象
狂神说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
- 只能靠子类去实现它
- 抽象方法只能在抽象类中定义
- 抽象类中可以定义普通方法
思考
- 抽象类是否存在构造器?
- 存在的
- 抽象类存在的意义?
- 提高开发效率
类和接口的一个区别*
类只能单继承;
接口可以多继承;
接口
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() {
}
}
作用
-
约束
-
定义一些方法,让不同的人分别去实现
-
默认方法都是 public abstract
-
常量都是 public static final
-
接口不能直接被实例化
-
接口中没有构造方法
-
接口可以实现多个
-
-
实现接口必须要重写方法
内部类
写的很详细!
-
成员内部类 - 在public class 中声明的 class
-
静态内部类 - 在java文件中,public class 外部声明的 class
-
局部内部类 - 在public class 中的方法中,声明的class ,不用将实例保存到变量中,用完就扔
// 一个java文件中,可以由多个 class ,但是只能有一个 public class