java的三大特征
继承,封装,多态
1.封装
关键字的使用
保护类的特性和行为
同时给外部类提供一些改变数据的方法
2. 多态的理解
向上转型 List list = new ArrayList
父类引用指向子类对象,但是子类的方法没有办法获取到
3. ==和.equals 的区别
==比较的是引用是否指向对上的同一地址
所有的类都是继承于Object
Object中.equals 方法实际上没有任何区别 就是使用的==比较。
但是会有一些类重写equals方法比如String类,重写的方法为:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
当==不相同时,会判断二者的长度和内容是否相等
情况一:
String s1 = new String("java");
String s2 = new String("java");
都是new出来的对象,二者在对上的地址不相同。结果== false, equals true
情况二:
String s1 = new String("java");
String s2 = s1;
二者只不过是引用不相同,但是指向的地址都是相同的,所以两个都是true
情况三:
String s1 = "java";
String s2 = "java";
两个方法都是true。
s1和s2都储存在栈中,第一句执行时会在字符串常量池中找有没有hello,如果没有则创建,第二次执行时直接使用已经存在的
4. Hashcode和equals
所有的Object中都有hashcode()方法,他是在计算对象在队中的索引。
但是两个不同对象计算出来的索引位置可能是相同的,这是hashcode的计算方法所决定的
5. 接口与继承
接口中的方法必须重写
但是继承的方法可以不重写
6. 重写和重载
重写:子类重写父类方法
重载:在一个类中,类的方法名一样但是传入进的参数不相同,典型案例:构造方法
7. 抽象类和接口
三点区别:
1.抽象类中可以有普通方法,但是接口中必须是public static方法
2.抽象类成员可以是各个类型的,但是接口中必须是public static final类型的
3. 抽象类只能有一个,但是接口可以继承很多
应用场景:
接口:A like B
继承抽象类:A is a
8. 反射
9. 注解的原理
10. 抽象类 和内部类
11. 匿名内部类