内部类定义
将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类,可以完善Java多继承的写法
内部类分类
- 成员内部类
- 局部内部类
- 匿名内部类
- 静态内部类
成员内部类: 成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)
class outerClass {
class innerClass {
}
}
局部内部类: 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内
class outerClass{
public void menberFunction {
static class innerClass{
}
}
}
匿名内部类: 匿名内部类就是没有名字的内部类
interface Inter {
public abstract void show();
}
class Outer {
public void method(){
new Inner() {
public void show() {
System.out.println("HelloWorld");
}
}.show();
}
}
静态内部类: 指被声明为static的内部类,他可以不依赖内部类而实例,而通常的内部类需要实例化外部类,从而实例化,去掉static 就是成员内部类
class outerClass {
static class innerClass {
}
}
在Java中有两种实现OOP的方式:抽象、接口
抽象类
- 抽象方法必须为public或者protected
- 抽象类不能用来创建对象
- 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类
接口
- 接口中的变量会被隐式地指定为public static final变量
- 方法会被隐式地指定为public abstract方法
- 接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量
两者区别
- 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
- 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
- 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
重要的区别
设计层面上的不同,抽象类是对一种事务本身的抽象,即对类抽象,把某些类的整体全部抽象,包括属性、行为,它可以作为很多子类的父类,是一种模板化设计,而接口是一种行为规范,是一种辐射式设计,仅仅对某些类局部(行为)进行抽象。
还有一点就是使用规范上的不同:抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。