默认方法
-
default:默认方法 可以带方法体
-
可以在实现类中重写,并可以通过接口的引用调用
-
jdk1.8后新增
default void connection(){ System.out.println("我是接口中的默认链接"); }
静态方法
-
static:静态方法 可以带方法体
-
static void stop(){ System.out.println("我是接口中的静态方法"); }
-
不可以在实现类中重写,可以使用 接口名.静态方法名 调用
-
jdk1.8后新增
接口中成员的特点
-
成员变量
只能是常量
默认修饰符:public static final
-
构造方法
没有构造方法
-
成员方法
-
只能是抽象方法
-
默认修饰符:public abstract
-
JDK8:接口中可以定义有方法体的方法
-
接口和类之间的关系
-
类和类
继承关系,只能单继承,不能多继承
-
类和接口
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
-
接口和接口
继承关系,可以单继承,也可以多继承
如果实现类实现了最下面的子接口,那么就需要重写所有的抽象方法
实现接口的类如果不能实现所有接口中待重写的方法,则必须设置为抽象类
内部类
-
在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类
-
与之对应,包含内部类的类被称为外部类
成员内部类
-
最常见,也称为普通内部类
-
内部类在外部使用时,无法直接实例化,需要借由外部类信息才能完成实例化
-
内部类的访问修饰符可以任意,但访问范围会受到影响
-
内部类可以直接访问外部类的成员,如果出现同名的属性,优先访问内部类中定义的
-
可以使用外部类.this.成员的方式,访问外部类中同名的信息
-
外部类访问内部类信息,需要通过内部类实例,无法直接访问
-
内部类编译后.class文件命名:外部类$内部类.class
package com.imooc.people; //外部类 public class Person { public int age; public Heart getHeart() { new Heart().temp=12; return new Heart(); } public void eat() { System.out.println("吃饭"); } //成员内部类 public class Heart{ int age=13; int temp=22; public String beat() { eat(); return Person.this.age+"心脏在跳动"; } } }
package com.imooc.people; public class PeopleTest { public static void main(String[] args) { Person lili=new Person(); lili.age=12; //获取内部类实例对象 //方式一:new 外部类.new 内部类 Person.Heart myHeart=new Person().new Heart(); System.out.println(myHeart.beat()); //方式二:外部类对象.new内部类 myHeart=lili.new Heart(); System.out.println(myHeart.beat()); //方式三:外部类对象.获取方法 myHeart=lili.getHeart(); System.out.println(myHeart.beat()); } }