Java学习 第十五天 抽象类 接口 内部类
抽象类
- 抽象方法:
将共性的行为,抽取到父类,但是每个子类执行的内容是不一样的,所以在父类中不能确定具体的方法体,该方法就定义为抽象方法 - 抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类
抽象方法定义格式:
public abstract 返回值类型 方法名(参数列表);
抽象类的定义格式:
public abstra 类名{}
抽象类和抽象方法的注意事项
- 抽象类不能实例化
- 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
- 可以有构造方法
- 抽象类的子类:
接口可以理解为一种规则,一种行为的抽象
接口的定义和使用
-
接口用关键字 interface来定义
public interface 接口名{}
-
接口不能实例化
-
接口和类直接是实现关系,通过implements关键字表示
public class 类名 implements 接口名{}
-
接口的子类(实现类)
要么重写子类
要么是抽象类 -
注意1:接口和类的关系,可以单实现,也可以多实现
public class 类名 implemengts 接口名1,接口名2{} -
注意2:实现类还可以继承一个类的同时实现多个接口
public class 类名 extends 父类 implemengts 接口名1,接口名2{}
接口中成员的特点
成员变量
只能是常量
默认修饰符:public static final
构造方法
没有
成员方法
只能是抽象方法
默认修饰符:public abstract
JDK7以前:接口只能定义抽象方法
接口和接口直接的关系
继承关系,可以单继承,也可以多继承
- 什么是内部类
写在一个类里面的类叫做内部类
- 什么时候用到内部类
B类事物是A类的一部分,且B单独存在没有意义
比如:汽车发动机,Array list的迭代器
public class Outer {
private int a = 10;
class InnerZ {
private int a = 20;
public void show() {
int a = 30;
//Outer.this就是指向外部类
System.out.println(Outer.this.a);//10
//this是只本类
System.out.println(this.a);//20
//就近原则,局部变量
System.out.println(a);//30
}
}
}
Outer.Inner inner = new Outer().new Inner();
inner.show();
输入结果
10
20
30
静态内部类
静态内部类只能访问外部类当中的静态变量和静态方法,如果想要访问非静态的需要创建外部类的对象
public class Outer {
static class Inner {
public void show() {
int a = 30;
}
public static void show2() {
int a = 30;
System.out.println(a);//30
}
}
}
//创建静态内部类的对象
//只要是静态的东西,都可以用类名点直接获取
//静态内部类创建对象后,才能访问外部类的非静态成员
//注意这个new Outer.Inner();
Outer.Inner oi=new Outer.Inner();
Outer.Inner.show2();
局部内部类
将内部类定义在方法里面的就叫做局部内部类
外界无法直接使用,需要在方法内部创建对象并使用
该类可以直接访问外部类的成员,也可以访问方法内的局部变量
匿名内部类(重点)
匿名内部类本质上就是隐藏了名字的内部类
格式:
new 类名或者接口名(){
重写方法;
};