1.我们使用interface关键字定义接口
2.我们使用implments关键字建立接口实现类与接口的实现关系
接口是父级,接口实现类是子级
3.接口实现类如果实现部分/不实现接口中的抽象方法,那么实现类是一个抽象类接口实现类,如果实现了接口所有的抽象方法,那么这个实现类是一个普通类
4.抽象类与接口都不可以实例化/创建对象
5.接口没有构造函数,实现类使用的super()是父类的无参构造
如果没有明确指定父类,super()代表的才是Object的无参构造
6.接口中都是静态常量,没有成员变量,因为会默认拼接public static final
故此:静态常量与抽象方法默认拼接的部分,可以省略不写
8.接口不是类
9.接口是用来指定规则的【有哪些功能?方法有参数吗?有返回值吗?】
方法具体的实现交给接口的实现类去完成
总结:
1.类与类的关系
继承关系,只支持单继承。
2.类与接口的关系:
实现关系,可以单实现,也可以多实现
class A implements inter1{}
class A implements inter1,inter2....{}
3.接口与接口的关系:
继承关系,可以单继承,也可以多继承
注意:如果创建接口实现类的话,inter3Impl只需要实现接口3与接口1的抽象方法
inter4impl不仅需要
实现接口4,还需要实现接口4继承自接口1与接口2的所有功能
package cn.tedu.inter2;
/*本类用于测试接口与类之间的复杂关系*/
public class TestRelation {
public static void main(String[] args) {
}
}
interface Inter1{
void save();
void delete();
}
interface Inter2{
void update();
void find();
}
//接口可以继承接口,而且还可以多继承,一个子接口继承多个父接口,多个接口之间使用逗号分隔。
interface Inter3 extends Inter1,Inter2{
}
//implements inter3 实现类与接口是实现的关系,并且实现类可以实现多个接口,接口之间用逗号隔开。
// 对于Java中的类而言,遵循:单继承,多实现的规则。
// 对于Java中的接口而言,遵循:既可以单继承,也可以多继承的规则
class inter3Iml implements Inter1, Inter2{
@Override
public void save() {
System.out.println("稍等...正在努力保存中");
}
@Override
public void delete() {
System.out.println("小二正在马不停蹄的删除中");
}
@Override
public void update() {
System.out.println("客官,马上就更新好啦");
}
@Override
public void find() {
System.out.println("正在为您查询,请稍后...");
}
}
抽象类与接口的关系:
1.抽象类使用class关键字定义,是类
接口使用interface关键字定义,是接口
2.抽象类里可以定义成员变量
接口里没有成员变量,有的是静态变量,默认会拼接public static final
3.抽象类类里的方法不做限制:全普,全抽,半普半抽
接口中的方法都是抽象方法,默认会拼接:public abstract
4.抽象类与接口均不可以实例化/创建对象
5.抽象类里有构造方法,不是为了自己使用,而是为了子类创建对象时调用,接口里没有构造方法,接口实现类调用的构造是父类的构造的方法,与接口无关
6.接口可以多继承,也就是说,一个接口可以继承一个接口/多个接口
抽象类只能单继承,也就是说,一个子类只能有一个父类
7.抽象是后天重构的结构,接口是先天设计的结果。
内部类特点:
1) 内部类可以直接访问外部类中的成员,包括私有成员
package cn.tedu.cn.tedu.innerclass;
/* 本类用于内部类的入门案例*/
public class TestInner1 {
public static void main(String[] args) {
/* 创建内部类对象
* 外部类名.内部类名 对象名=外部类对象.内部类对象
*/
Outer.Inner oi=new Outer().new Inner();
oi.delete();
System.out.println(oi.sum);
new Outer().find();
}
}
class Outer{
//创建外部类的成员变量
String name;
private int age;
//创建外部类的成员方法
public void find(){
System.out.println("Outer...find()");
/**
* 测试外部类能否使用内部类的资源?不可以
*/
// System.out.println(sum); 报错
// delete();
/**
* 外部类如果想要使用内部类的资源,必须先创建内部类的对象
* 然后通过内部类对象来调用内部类的资源
*/
Inner in=new Inner();
System.out.println(in.sum);
// in.delete();
}
/**
* 根据内部类所在的位置的不同,分为:成员内部类(类里方法外)与局部内部类
*/
class Inner{
int sum=10;
public void delete(){
System.out.println("Inner...delete()");
/**
* 测试内部类能否使用外部类资源
* 内部类可以直接使用外部类的资源,包括私有资源
*/
System.out.println(name);
System.out.println(age);
find();
}
}
}
Inner...delete()
null
0
Outer...find()
10
10
Outer...find()
10