目录
|-- final关键字、内部类
|-- 多态
|–抽象类
|-- 接口
内部类:
如何定义内部类:
内部类可以直接访问包裹着它的外部类任何属性和方法(包括私有的)
一般而言,定义内部类,注意的目的,肯定是在包裹着它的外部类中使用它。面试题:
package com.openlab.day12.innerclass;
import com.openlab.day12.innerclass.TestInnerClass.Inner01;
import com.openlab.day12.innerclass.TestInnerClass.Inner02;
public class TestInnerClass {
private int id = 10;
private static String name;
public void say() {
Inner01 t = new Inner01();
t.say();
}
// 此时Inner01就是TestInnerClass的内部类
public class Inner01 {
public void say() {
System.out.println(id);
System.out.println(name);
}
}
// 静态类(静态内部类)
public static class Inner02 extends Outer {
public void say() {
TestInnerClass tic = new TestInnerClass();
System.out.println(tic.id);
System.out.println(name);
}
}
}
class Outer {
public void say() {
// TestInnerClass tic = new TestInnerClass();
// 如果在外界初始化内部类对象
Inner01 t1 = new TestInnerClass().new Inner01();
t1.say();
// 如果是静态内部类,可以使用下面方式创建
Inner02 t2 = new TestInnerClass.Inner02();
}
}
静态导入(获取文件后缀名)
package com.openlab.day12.innerclass;
public class Util {
public static final double PI = 3.14;
public static String getSuffix(String path) {
return path.substring(path.lastIndexOf(".") + 1);
}
}
package com.openlab.day12.innerclass;
// jdk 1.5提供的新特性,静态导入
import static com.openlab.day12.innerclass.Util.*;
public class Test {
public static void main(String[] args) {
// String suffix = Util.getSuffix("c://a.b/c/d.txt");
// System.out.println(suffix);
String suffix = getSuffix("c://a.b/c/d.txt");
System.out.println(suffix);
System.out.println(PI);
}
}
面向对象三大特征——多态
多态: 一个事务的多种状态
多态是在 继承 的基础上存在的,父类引用 指向 子类实例!!
多态的案例:
多态的案例:
有个人,养了写宠物,宠物可能会生病,治疗宠物
抽象类:
如果父类中的方法不需要实现(没有方法体),而是由子类实现的, 该方法就可以声明为抽象方法,抽象方法使用abstract关键字修饰。
如果某个类存在抽象方法,该类必须声明抽象类
一个某个类中存在抽象方法,该类必须是抽象类;
如果一个类是抽象类,它里面的方法不一定是抽象方法!!
抽象方法,本质就是用来继承实现的。
如果一个类,继承了抽象类,没有实现里面的抽象方法,则该类必须也声明为抽象类,由其子类继续实现。 抽象类无法实例化!!!
匿名内部类,来解决抽象类无法实例化的问题!!!
接口(interface):
java中的接口是一种特殊的抽象类,它里面的所有方法都没有实现
1、接口中成员默认访问修饰符都是public,即便你不写!!!
2、一般接口中不写不同属性,写的要么是常量,要么是一些公共的变量(建议使用static修饰,方便访问)
3、接口中的方法,都是抽象方法,没有实现体。
4、因此接口就是一种特殊的抽象类
接口的实现类:
接口的命名规范:
接口是可以多实现的,一定程度上,不全java单继承的缺点。
在jdk8.0之前,接口中,没有实现了的方法(所有的方法都是没有实现的)!!!
8.0新特性: 1、接口中可以存在默认方法 default关键字来修饰 2、也可以静态方法,也就是说,此时接口就是一个工具类.