Java抽象类、接口、内部类(静态内部类,非静态内部类、匿名内部类)、枚举类 知识点总结
一.抽象类
类的基本特征也就是属性 、构造器、方法\这里从这三个方面介绍抽象类
1.关键字:abstract
2.基本要点:
普通类里面有的东西抽象类里面都有,也就是属性是跟普通类没有差别的。方法也可以写普通方法
抽象类构造器需要深度将一下:普通类的继承是不会继承父类构造器的,如果父类的构造器是无参构造器那么子类也是一个无参构造器。也就是继成之后自动生成的super(); 如果父类的构造器不是默认的空构造器,就需要在子类的构造器中使用super(String a,String b);调用父类构造器中有的参数,然后可以在初始化自己的子类参数,this.c = c;
这里的抽象类也是一样的,abstract类继承,只继承到属性跟方法。构造器自己写自己的然后使用super(......);调用父类的具体初始化实现
抽象类的抽象方法:public abstract void 名字(); 是不需要方法体的,知识体现了一个通用的行为特征,整个行为特征是无法分辨的,比如动物抽象类中的一个叫声的方法,是不知道是那种具体动物叫的没法试下具体的方法体。所以继承抽象类后需要实现里面的所有抽象方法。抽象类也是用来被继承的!
3.抽象类知识点:
抽象类不能实例化,也就是不能new,so也就是构造器不可以创建对象,没有构造器(普及一下,普通类的 new其实就是使用构造器来创建实例(对象)的)。也所以抽象类必须要被普通子类来实现。
抽象类里面不一定有抽象方法,但是有抽象方法的类一定是抽象类。
抽象类体现的是一种模板类,是未完成的类设计。
4.总结一下:抽象类就比普通类多了个抽象方法,其他的普通类有的抽象类也都有.都一样
二:接口(接口也是抽象的一种体现形式)
1.关键字:interface
2.基本要点:
这里也是从 属性 构造器 方法来说
属性:相比抽象类来说有点不一样,接口中的属性默认都是常量,默认使用public static final来修饰,想想也是,人家提供接口就得给你定死,不能再修改了。
构造器:没有。 有属性。 也体现出接口是不能new实例的,跟抽象类是一样的,所以说接口也是抽象类的一种体现形式。
有参数无法构造。
方法:默认是抽象的,public abstract void test(); 也可以写成 void test(); 用来被实现接口的类重新实现。p
3.接口知识点
首先接口之间可以进行多继承,类实现接口可以多实现。
接口是一套行为规范,约束了怎样去做。具体的做法可能不同,但是结果都是一样的。
Interface test = new Test();//接口变量指向其实现类的实例
接口体现了规范与实现相分离原则。充分利用接口可以利于代码的扩充维护
接口也是用来继承的,位于继承链 的顶端。
实现接口就必须实现接口里的所有抽象方法,除非你本身就是一个抽象方法。
4.补充:
接口的多态: 接口变量指向其实现类的实例
抽象类的多态:父类引用指向子类实例
三:内部类
用的不多,能看懂就行
内部类可以理解为是像构造器那样,是类的一个成员。他提供了一个更好的封装,但是使原来的东西更复杂,所以出现频率不是很高、
1.非静态内部类
主要是看如何调用的,个人总结如下:
外部类.内部类 内部类实例(可用) = 外部类实例.内部类实例(new 类名)
知识点:
不可以定义静态成员,加载问题。
可以定义非静态成员
2.静态内部类
知识点:
静态内部类static修饰
可以定义静态成员
可以定义非静态成员
3.匿名内部类
(1)抽象匿名内部类
抽象匿名内部类 new表示创建了一个匿名内部类的实例,这个类继承抽象类AbstractDemo
new abstract()创建了一个实例,实现了抽象类的匿名内部类的实现
(2)接口匿名内部类
有一点需要注意:匿名类最后结尾加分号
new创建了一个匿名内部类的实例,这个匿名内部类实现了接口
接口变量指向其实现类的实例,当调用方法时,执行的是其实现方法的方法
四:枚举类
定义:方法 属性 构造器 与普通类的定义是一样的。
枚举类 基本知识点:
关键字: enum
枚举类中不需要new创建实例,在创建类的时候实例就已经创建好了。
枚举类的构造器只能使用private修饰,限制了实例不可以在外部创建,直接是用实例!比如上面代码中的DOG PIG
属性一般(推荐)定义成private final,一定是private的。只需要提供get方法