IDEA建包
IDEA可以直接右键新建包而非使用.分符号来建立路径
Java名称屏蔽
class Base{
void sdd(int x){System.out.println("Base");}
void sdd(double x){}
}
class Ext extends Base{
void sdd(int x){System.out.println("Ext");}
}
此方法使得调用派生类对象sdd方法时仍会根据参数列表判断调用基类方法or派生类方法
@Override注解让编译器提示自己可能想要重写但实际重载了某函数
代理设计模式
将某些类的对象放在新类中,由新类为原类对象执行方法。具体见如下博客
https://blog.csdn.net/liguangix/article/details/80858807
为了继承
一般的规则是所有数据成员private,所有方法指定为public(protected)。Java使用super
关键字表示超类,super.scrub()
将调用基类版本方法。
向上转型
个人理解,有点类似于:使用C++中的基类方法时,如果参数是基类指针类型,那么参数可以是派生类指针类型,派生类指针被当做基类指针来使用了。
final关键字
final关键字对数据的作用类似于c++的const(个人理解)
public class FinalData{
private static Random rand = new Random(47);
private final int valueOne = 9;//编译时常量
private final int i4 = rand.nextInt(20);//运行时常量
private final int[] a = {1, 2, 3, 4, 5, 6};//a不可改变,a数组内的值可以改变
public static void main(String[] args) {
FinalData fd1 = new FinalData();
//! fd1.a = new int[3];禁止
fd1.a[2]++;//可以
}
}
空白final
被声明为final但又未给定初值的域。即未初始化。比如
private final int j;//Blank final
可以在构造器中初始化
public BlankFinal(){
j = 1;// Initialize blank final
}
必须在域的定义处或者每个构造器中用表达式对final进行赋值。且一旦定义处赋了初值,构造器中就不能再赋初值
final方法
目的:把方法锁定,以防任何继承类修改它的含义;效率,内嵌调用,中文书P143。
类中所有private方法都隐式指定为final的。添加final修饰词并不改变private方法的性质。
参考Java编程思想 第四版