Interface(接口)
- JAVA不支持单继承,所以当从几个类中派生出一个子类来继承多个类所有的属性与方法的时候,继承不能满足我们的需求,以此引出接口,
- 接口与类是两个并列的结构
- 如何定义接口——通过定义接口的成员
1. JDK7及以前只能定义全局常量与抽象方法,不能定义构造器——这意味着接口不能实例化,这里与抽象类不同,抽象类不能实例化,但是有构造器,因此它可以让子类实例化
2. JDK8新特性,除了定义全局常量与抽象方法,还可以定义静态方法,默认方法。
1. 但是接口中定义的静态方法只能接口自身调用
2. 通过实现类的对象,可以调用接口中的默认方法,只是调用的依然是重写以后的方法。
3. 如果子类或实现类继承的父类和实现的接口中声明了同名同参的方法,那么子类在没有重写此方法的情况下,默认调用的是父类中的方法 - 如何使用接口——接口通过让类去implement的方式来使用(接口依托于对象),
1. 如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化,否则,此实现类仍为抽象类。这里与子类继承抽象类,并实现所有抽象方法的过程相似
2. 多实现,java类可以实现多个接口,i
implement interface1,interface2
3. 当然,在实现接口的同时,还可以继承某个类
extends Class1 implement interface1,interface2
4. 接口由类实现,类由类继承,接口与接口之间也有(多)继承关系
5. 接口的使用体现多态性——因为接口是不可实现的,当我们使用方法的形参为一个接口或抽象类时,我们可以使用实现类(实例化类)来代替
6. 接口实际上就是定义了一种规范
7. 面向接口编程 - 接口的使用——代理模式,
类的内部成员五:内部类
- JAVA中允许将一个类A声明在另一个类B中,则A就是内部类,类B则为外部类
- 内部类的分类:成员内部类(静态,非静态) vs 局部内部类(方法内,代码块内,构造器内)
成员内部类
-
一方面作为外部类成员:
1. 调用外部类结构
2. 可以被static修饰
3. 四种权限修饰符 -
另一方面,作为一个类
1. 可以在里面定义属性,方法,构造器
2. 可以被final修饰,表示此方法不能被继承
3. 还可以被abstract修饰 -
实例化成员内部类的对象
//创建静态的成员内部类 Person.Man() xiaoming=new Person.Man(); //创建非静态的成员内部类 //Person.Woman xiaofang=new Person Woman();//错误,非静态的类不能直接使用类来加载 Person p=new Person(); Person.Woman xiaofang=p.new Woman();