final
final +class :该类没有子类,不允许被继承
final +方法 : 该方法不允许被子类重写,但是可以正常被子类正常使用
final +修饰方法内的局部变量时,该变量一旦赋值,该变量不允许修改了
final+类中成员属性,赋值过程:1.定义直接初始化 2.构造方法 3.构造代码块
多态
要满足继承关系
接口
一个类实现一个接口用implements关键字+接口名称
一个类实现一个接口的时候必须实现接口里面的方法(就是把方法重写)
接口可以实现继承,可以同时继承多个父接口,类可以同时实现多个接口
内部类
成员内部类
persion是外部类,Hearth是内部类,beat是内部类的一个方法
//获取成员内部类对象实例,方式1:new 外部类.new 内部类
Person.Heart myHeart=new Person().new Heart();
System.out.println(myHeart.beat());
//获取成员内部类对象实例,方式2:外部类对象.new 内部类
myHeart=lili.new Heart();
System.out.println(myHeart.beat());
//获取成员内部类对象实例,方式3:外部类对象.获取方法
myHeart=lili.getHeart();
System.out.println(myHeart.beat());
// 成员内部类
/*
* 1、内部类在外部使用时,无法直接实例化,需要借由外部类信息才能完成实例化
* 2、内部类的访问修饰符,可以任意,但是访问范围会受到影响
* 3、内部类可以直接访问外部类的成员;如果出现同名属性,优先访问内部类中定义的
* 4、可以使用外部类.this.成员的方式,访问外部类中同名的信息
* 5、外部类访问内部类信息,需要通过内部类实例,无法直接访问
* 6、内部类编译后.class文件命名:外部类$内部类.class
* 7、内部类中是否可以包含与外部类相同方法签名的方法?以及如何调用?
*/
/*
// 静态内部类
/*
* 1、静态内部类中,只能直接访问外部类的静态成员,如果需要调用非静态成员,可以通过对象实例 new Person().eat();
* 2、静态内部类对象实例时,可以不依赖于外部类对象
* 3、可以通过外部类.内部类.静态成员的方式,访问内部类中的静态成员
* 4、当内部类属性与外部类属性同名时,默认直接调用内部类中的成员;
* 如果需要访问外部类中的静态属性,则可以通过 外部类.属性 的方式;
* 如果需要访问外部类中的非静态属性,则可以通过 new 外部类().属性的方式;
*/
//获取静态内部类对象实例
Person.Heart myHeart=new Person.Heart();
Person.Heart.say();
// 方法内部类
/*
* 1、定义在方法内部,作用范围也在方法内
* 2、和方法内部成员使用规则一样,class前面不可以添加public、private、protected、static
* 3、类中不能包含静态成员
* 4、类中可以包含final、abstract修饰的成员
*/