抽象类和抽象方法
抽象方法:
使用abstract修饰的方法,没有方法体,只有声明。定义的是一种“规范”,就是告诉子类必须要给抽象方法提供具体的实现。
抽象方法的声明:
abstract 返回值 方法名();
这个就是抽象方法,使用absract修饰,且没有方法体;
抽象类:
包含抽象方法的类就是抽象类。通过abstract方法定义规范,
抽象类的声明:
修饰符 abstract 类名{ }
抽象类的用途:
要求子类必须定义具体实现方法。通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。
代码演示:
这是一个抽象类,且含有抽象方法

这个是继承抽象类的实现类,如不对抽象方法进行重新,编译就会报错;

对抽象方法进行重新后,编译器就能通过;

接口
为什么需要接口?接口和抽象类的区别?
接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离。
抽象类还提供某些具体实现,接口不提供任何实现,接口中所有方法都是抽象方法。接口是完全面向规范的,规定了一批类具有的公共方法规范。
区别:
1. 普通类:具体实现
2. 抽象类:具体实现,规范(抽象方法)
3. 接口:规范!
接口的声明:
[访问修饰符] interface 接口名 [extends 父接口1,父接口2…]
{常量定义;
抽象方法定义;}
代码演示:
一个接口是可以继承多个接口的

如果哪个类要实现接口interfaceC的话,就必须实现interfaceD和interfaceF中的方法。因为interfaceC继承了interfaceD和interfaceF


定义接口的详细说明:
1. 访问修饰符:只能是public或默认。
2. 接口名:和类名采用相同命名机制。
3. extends:接口可以多继承。
4. 常量:接口中的属性只能是常量,总是:public static final 修饰。不写也是。
5. 方法:接口中的方法只能是:public abstract。 省略的话,也是public abstract。
要点
1. 子类通过implements来实现接口中的规范。
2. 接口不能创建实例,但是可用于声明引用变量类型。
3. 一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。
4. JDK1.7之前,接口中只能包含静态常量、抽象方法,不能有普通属性、构造方法、普通方法。
5. JDK1.8后,接口中包含普通的静态方法。
接口的多继承,
一个类继承一个父类但可以继承多个接口,继承多个接口后,需要把每个接口的方法都重写;
代码演示
接口interfaceA中有一个方法show方法,虽然只写了public修饰,但是在接口中,默认会是public abstract修饰的。
实际等于是public abstract void show()
int A=1100;实际等于是 public static final int A=1100;

同理。接口interfaceB中有一个方法int方法,没有写任何参数,
但实际上等于public abstract void info()

FatherClass类,这是一个普通的类,没有什么特别的。

SubClass这个类是继承类FatherClass类,并且实现了 interfaceA和interfaceB,所以SubClass必须重写info和show方法,否则程序会报错。


内部类的概念
我们把一个类放在另一个类的内部定义,称为内部类(innerclasses)。
内部类可以使用public、default、protected 、private以及static修饰。而外部顶级类(我们以前接触的类)只能使用public和default修饰。
内部类的作用:
1. 内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直接访问。
2. 内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。 但外部类不能访问内部类的内部属性。
3. 接口只是解决了多重继承的部分问题,而内部类使得多重继承的解决方案变得更加完整。
内部类的使用场合:
1. 由于内部类提供了更好的封装特性,并且可以很方便的访问外部类的属性。所以,在只为外部类提供服务的情况下可以优先考虑使用内部类。
2. 使用内部类间接实现多继承:每个内部类都能独立地继承一个类或者实现某些接口,所以无论外部类是否已经继承了某个类或者实现了某些接口,对于内部类没有任何影响。
内部类的分类
非静态内部类(外部类里使用非静态内部类和平时使用其他类没什么不同)
非静态内部类可以直接访问外部类的成员,但是外部类不能直接访问非静态内部类成员。
非静态内部类不能有静态方法、静态属性和静态初始化块。
静态内部类
静态内部类看做外部类的一个静态成员。 因此,外部类的方法中可以通过:“静态内部类.名字”的方式访问静态内部类的静态成员,通过 new
静态内部类()访问静态内部类的实例。
匿名内部类的使用
适合那种只需要使用一次的类。比如:键盘监听操作等等。
String基础
1. String类又称作不可变字符序列。
2. String位于java.lang包中,Java程序默认导入java.lang包下的所有类。
3. Java字符串就是Unicode字符序列,例如字符串“Java”就是4个Unicode字符’J’、’a’、’v’、’a’组成的。
4. Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是String类的一个实例。
String中常用的方法:

