今天学习了
抽象类和抽象方法:
有抽象方法的类必须是抽象类,抽象类不一定有抽象方法。
抽象类必须被子类重写或者子类是一个抽象类。
接口: 接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离。用interface修饰为接口。
接口的声明;访问修饰符 interface 接口名 【extends 父接口1,父接口2】{
常量定义(【public static final】 类型名 常量名=常量;)
方法定义(抽象方法)【public abstract】 省略的话,也是public abstract。
}
接口的特性:继承行(多继承),传递性。
面对接口编程:
接口就是规范,就是项目中最稳定的东东! 面向接口编程可以让我们把握住真正核心的东西,使实现复杂多变的需求成为可能。
通过面向接口编程,而不是面向实现类编程,可以大大降低程序模块间的耦合性,提高整个系统的可扩展性和和可维护性。
面向接口编程的概念比接口本身的概念要大得多。设计阶段相对比较困难,在你没有写实现时就要想好接口,接口一变就乱套了,所以设计要比实现难!
内部类:把一个类放在另一个类的内部定义,称为内部类(innerclasses)。
作用: 1. 内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直接访问。
2. 内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。 但外部类不能访问内部类的内部属性。
3. 接口只是解决了多重继承的部分问题,而内部类使得多重继承的解决方案变得更加完整。
内部类的分类:
a) 非静态内部类(外部类里使用非静态内部类和平时使用其他类没什么不同)
b) 静态内部类(用static修饰的内部类)
c) 匿名内部类
适合那种只需要使用一次的类。语法如下:
new父类构造器(实参类表) \实现接口 () {
//匿名内部类类体!
}
d)局部内部类
还有一种内部类,它是定义在方法内部的,作用域只限于本方法,称为局部内部类。
String类:String类又称作不可变字符序列。
String位于java.lang包中,Java程序默认导入java.lang包下的所有类。
符号"+"把两个字符串按给定的顺序连接在一起,并且是完全按照给定的形式。
当"+"运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。
常量池:
1. 全局字符串常量池(String Pool)
全局字符串常量池中存放的内容是在类加载完成后存到String Pool中的,在每个VM中只有一份,存放的是字符串常量的引用值(在堆中生成字符串对象实例)。
2. class文件常量池(Class Constant Pool)
class常量池是在编译的时候每个class都有的,在编译阶段,存放的是常量(文本字符串、final常量等)和符号引用。
3. 运行时常量池(Runtime Constant Pool)
运行时常量池是在类加载完成之后,将每个class常量池中的符号引用值转存到运行时常量池中,也就是说,每个class都有一个运行时常量池,类在解析之后,将符号引用替换成直接引用,与全局常量池中的引用值保持一致。