1.什么是抽象类?
用abstract 修饰的类就是抽象类。
1.1抽象类的特点:抽象类可以有构造方法,不可以创建对象。
1.2 抽象类中可以包含哪些成员呢?:
(1) 成员变量(实例变量/属性)
(2) 成员方法/实例方法。
(3) 静态方法。
(4) 构造方法。
(5) Final修饰的方法,(只能被子类调用,不允许被子类重写)。
(6) 抽象方法。
2. 什么是抽象方法?
- 使用abstract修饰的方法称为抽象方法。
抽象方法的特征:
(1) 抽象方法不允许有方法体,只能以分号“;”结尾。
(2) 抽象方法只能声明在抽象类中(含有抽象方法的类只能是抽象类)
(3) 抽象类中可以包含0个或多个抽象方法。
(4) 抽象方法必须被子类实现。
(5) 如果子类不能实现父类中的抽象方法,name子类也必须是抽象类。
总结:abstract 可以修饰类和方法。
2.1 什么情况下使用抽象方法?
- 通过抽象类,可以避免子类设计的随意性。透过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。(程序的可扩展和可维护性)
2.2 什么情况下使用抽象类: 父类的名称比较抽象,创建对象无意义。
3. 什么是接口?
接口:如果一个类中所有的方法均为abstract 方法,那么这个类就可以被声明为接口。
接口的定义: 使用 interface修饰,是一种数据类型,引用数据类型。
上面代码可以改写为:
用 interface 创建文件:用interface 声明以后,可以省略abstract关键字。
3.1 接口中可以包含哪些内容?
(1) 抽象方法(接口中的抽象方法均为public abstract修饰的方法)
(2) 非抽象方法。(JDK1.8改版以后才可以,JDK1.8以前不能有非抽象方法。非抽象方法必须使用public default 关键字修饰)
(3) 属性(必须是 public static final 修饰的常量。)
接口中中不能定义构造方法,原因:接口不是类。
3.2 接口和类的关系?
- 类去实现接口中的抽象方法,实现关系。 Implements。
- 若干重要问题:
(1)一个类存在继承关系,又存在实现关系,extends 前? Implements 前?
继承 –-> 父子关系 --> 亲爹。
实现 –-> 实现关系 -à 干爹。
Extends 在前, implements 在后。
(2) 如果父类与接口中有完全相同的方法(一模一样),子类/实现类所实现的方法是父类的? 还是接口的?
- 父类优先于接口,子类实现的是父类的方法。
(3)如果父类中与接口中有同名方法,对子类/ 实现类有什么要求呢?
- 父类与接口中的方法,在子类/实现类中构成方法的重载。
3.3 使用接口的意义
可以实现设计和实现的分离。抽象出N多不同类的共同点。
接口: has –a的关系。接口是有什么功能。
继承: is – a 的关系。继承是是一个什么功能。
(1) 接口有哪些特征?
- 接口的传递性
- 接口的继承性(多继承)。
(2) 使用接口实现多态的步骤?
(1)编写接口,
(2)实现类实现接口中的方法。
(3)接口(类型)new实现类对象。
4.内部类:将一个类定义在另一个类的内部,该类就称为内部类。
4. 1. 内部类有以下特点?
(1)内部类作为外部类的成员,可以直接访问外部类的成员,
包括(private成员),反之则不行。
(2)内部类作为外部类成员,可声明为private、默认,protected 或public。
(3)内部类成员只有在内部类的范围内是有效的。
(4)用内部类定义在外部类中不可访问的属性,这样就在外部中实现了比内部类的private还要小的访问权限。
内部类的优缺点:
- 优点:内部类可以直接访问外部类的私有属性。
- 缺点:破坏了类的结构。
当内部类与外部类有相同的属性时,在访问外部类的属性时,需要加上外部类的 类名.this.属性。
4.2 内部类可以分以下几类:
(1)成员内部类(内部类相当于外部类的成员)。
(2) 静态内部类。
静态内部类:
- 不允许访问外部类的非Static属性。
- 如果内部类中的方法为static方法,那么内部类也必须为静态的
(3) 方法内部类。
只能在方法中使用,相当于方法中的局部变量。
JDK1.8新特性
(a). JDK 1.8 之前方法中的内部类要访问外部类的局部变量,必须加上final关键字(常量)。
(b). 从JDK1.8开始,在访问外部类的局部变量时,则可以不加final关键字。
(4) 匿名内部类(前提:存在继承或者实现关系)
(a).可以实现一个接口,或者继承一个父类。
(b).只能实现一个接口。
(c). 适合创建那种只需要一次使用的类,不能重复使用。比较常见的是在图形界面编程的GUI中用的比较多。
5. String类
String类的本质:String类相当于char类型的数组,数组的长度一旦创建不能更改,value的数组还使用了final进行修饰。
String comparable : Comparable的实现原理:
求两个字符串的长度的最小值,使用循环,比较对应位置上的字母,如果不相同,则对应位置上字母相减。如果相同,则是两个字符串的长度相减。
5.1 String类的常用构造方法:
6.常量池:
常量池:
用于存储在编译期确定,并被保存在已编译的字节码文件中的一些数据,包括final修饰变量及字符串变量,和符号引用量。
7. “==” 和 equals方法的区别?
“== ”:
- 比较两个字符串内存地址是否相等
Equals(object obj) :
- 用于比较两个字符串对象的内容是否相等。
1.先判断两个数据类型是否相等,如果相等则继续比较,如果不相等,则直接返回false。
2.比较对应位置上的字符是否相等,如果所有对象位置上字符都相等,返回true,否则返回false。
3. 如果字符串对象的上的字符对应位置相等,一个比另一个字符串长度要短,比如:A= “abc”, B = "abcdefg"; 则比较两个字符串的长度,长度不同则返回A.length - B.length 。
8. 二维数组的遍历:
- 两个普通for循环。
- 两个加强for循环:
- 外层普通for循环,内层加强for循环。
- 外层加强for循环,内层普通for循环。