目录
1.多态之方法覆写
方法覆写:子类与父类的方法名称,参数,返回值均一样
考察重点!!!方法覆写的权限要求:
- 方法覆写时,子类方法的权限修饰符一定要 >= 父类的权限
(同为包访问权限,但是位于不同包下,也是不可以的)
- 方法覆写时,不能出现private权限
(如果父类该方法为private权限,则子类的同方法能编译,但是是作为一个普通方法,并不是方法覆写)
(如果子类该方法为private权限,要么不符合>=父类方法权限,编译报错,要么两个都是private权限,没啥意义,也不是方法覆写)
- 方法覆写时,返回值也不是必须完全一样的,子类的方法返回值也可以是父类返回值类型的子类,即是向上转型的
- 多提一句,方法覆写只能覆写成员方法,不能覆写静态方法,而方法重载则都可以
2. 基本数据类型的默认值
记住!!!小数默认是double型
正确写法:
float b = 3.5f;
3.JVM内存区域的划分
(1)堆区:new出来的都在堆上保存,堆是 JVM所管理的最大内存区域
(2)虚拟机栈:重点是存储局部变量表(当然也有其他信息)
(3)本地方法栈:与虚拟机栈的作用类似. 只不过保存的内容是Native方法的局部变量.
(在有些版本的 JVM 实现中(例如HotSpot), 本地方法栈和虚拟机栈是一起的)
(4)方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据. 方法编译出的的字节码就是保存在这个区域
(5)程序计数器PC: 只是一个很小的空间, 保存下一条执行的指令的地址
(6)运行时常量池:是方法区的一部分, 存放字面量(字符串常量)与符号引用. (注意 从 JDK 1.7 开始, 运行时常量池在堆上).
还有:A a = new A()
4.关于switch
只能是整型,字符型,字符串,或是枚举
5.关于static
(1)static族可以互相访问
(2)static成员变量只能在类中声明,不能在方法内再定义(static方法内也不行)
6.接口权限
接口只有public权限
7.父类的Private权限
子类作用域中是无法访问父类的Private权限的
8.构造方法
对于子类的构造方法,一定是要先调父类的构造方法的,没有显式super父类的构造,就会默认调父类的无参构造,可是这道题,父类只有有参构造,那么JVM便不会再默认调父类无参构造,所以编译会报错
修改:
子类构造方法中,先super("B")
9.抽象类
抽象类也是不能实例化对象的;
继承抽象类的普通子类必须实现所有的抽象方法,而如果子类仍然是抽象类,则可以不覆写抽象方法,继续保留抽象方法;
abstract不能和final连用;
abstract不能和private连用;
abstract不能和static连用;
10.集合类
11.值传递VS引用传递
分析:
(1)a,b是引用,存储的是地址
(2)Java中调用函数是值传递,是将实参的值复制一份传到函数中
(3)x.append(y)是将x指向的字符拼接了y指向的字符,实际是改变了值
而y=x,只是将这里的y(operate.y)的指向改变了,改为了指向x,并没有改变原来y指向的B的值
(4)所以最后,a指向的字符是AB,b指向的字符仍然是B
12.访问修饰符的作用范围
大意了,真没想到这道题做错了😅,基础还是不够夯实呀
- 首先public一定是范围最大的,全部可见
- 其次,对于protected修饰的变量和方法,不止其子类,同一个包下的其他类也是可见的
- 然后,default是默认访问控制符,只有同一个包下可见
- 最后是private权限,只有类自己可见
【注意】protected,private都是不可以修饰外部类的,只能修饰变量和方法