-1.抽象类
被abstract修饰的方法是抽象方法,抽象方法没有方法体
一旦一个类中有抽象方法,这个类必须被声明成抽象类
如果一个子类继承了一个抽象父类,有两种解决方案:
1)抽象子类:不实现/实现一部分抽象父类中的抽象方法
2)普通子类:实现抽象父类中全部的抽象方法
抽象类不能实例化
抽象类有构造函数的,但是不是为了自己使用,为了子类super()调用
抽象类可以定义成员变量/成员常量
抽象类中可以定义全普/全抽/半普半抽
如果一个类不想被外界实例化,可以把这个类声明成抽象类
2.接口
我们使用interface关键字定义接口
我们使用implements关键字建立接口实现类与接口的实现关系
接口是父级,接口实现类是子级
接口实现类如果实现部分/不实现接口中的抽象方法,那么实现类是一个抽象类
接口实现类如果实现了接口所有的抽象方法,那么这个实现类是一个普通类
抽象类与接口都不可以实例化/创建对象
接口没有构造函数,实现类使用的super()是父类的无参构造
如果没有明确指定父类,super()代表的才是Object的无参构造
接口中都是静态常量,没有成员变量,因为会默认拼接public static final
接口中都是抽象方法,默认会拼接public abstract
故此:静态常量与抽象方法默认拼接的部分,可以省略不写
接口不是类!!!
接口是用来制定规则的【有哪些功能?方法有参数吗?有返回值吗?】
方法具体的实现交给接口的实现类去完成
4.接口与抽象类的区别
接口是一种用interface定义的类型
抽象类是一种用class定义的类型
接口中的方法都是抽象方法,还有默认方法与静态方法
抽象类中的方法不做限制
接口中的都是静态常量
抽象类中可以写普通的成员变量
接口没有构造方法,不可实例化
抽象类有构造方法,但是也不可以实例化
接口是先天设计的结果,抽象是后天重构的结果
接口可以多继承
抽象类只能单继承
3.内部类总结
内部类创建对象的格式:
外部类名.内部类名 对象名 = 外部类对象.内部类对象
根据内部类的位置不同,分为:
成员内部类(类里方法外)
局部内部类(方法里)
内部类可以直接使用外部类的资源,外部类使用内部类资源时,
需要先创建内部类的对象,通过内部类对象来调用
成员内部类被private修饰后,需要在外部类创建公共方法,间接访问内部类的资源
静态内部类不需要先创建外部类对象,
而是要先通过外部类的类名找到内部类,再创建内部类的对象
如果静态内部类有静态资源,可以不创建一个对象,就通过
外部类名.内部类名.静态资源名 的链式加载的方式,使用资源
直接创建外部类对象,调用局部内部类所处的方法时,并不会触发内部类的功能
需要在内部类所处的方法中,创建内部类对象,并调用其功能,功能才会被触发
匿名内部类没有名字,通常与匿名对象结合在一起使用
如果想要多次使用实现后的功能,还是要创建之前的普通对象
匿名对象只能使用一次,一次只能调用一个功能
匿名内部类其实就是充当了实现类的功能,去实现未实现的方法,只是没有名字而已