前言:一些比较重要的知识点的总结吧。
继承的内存的表现:
- 堆区:存储new出来的对象,每个对象与之相对应的class信息。
- 栈区:栈中只保存基础数据类型的引用和对象以及基础数据类型,还有一系列方法的压栈。
- 方法区:包含所有的class变量和static变量,方法区包含的都是在整个程序中永远唯一的元素。
- 举例:
- 局部变量和方法全部都是压在栈中的
- 在调用方法的时候全部都是先压栈在出栈,包括main方法。
子类的继承性:
- 在继承过程中,先执行父类构造方法,在执行子类构造方法。在多层继承层时编译器会一直上溯到最出类,再从上到下依次执行。
- 内存的演示:
- 在继承中访问权限的问题:
- 总结:若子类和父类在同一个包中,子类可以继承父类中访问权限为 public protected defalut的成员变量和方法,若不在同一个包中,子类可以继承父类中访问权限为public,protected的成员变量和方法。
- 在不同包中子类继承时候的内存问题依旧有private和默认的内存,但不可调用。
方法重写和成员变量隐藏 :
- 方法重写的一些要求:两同两小一大:
- 两同:方法名相同,参数列表一致。
- 两小:子类返回值类型更小或相等,子类抛出异常小于等于父类的抛出异常(这个以后会学)
- 一大:子类的访问权限比父类大或者相等。
- 重写和重载的区别:重载是在本类之中,重写是在父类和子类之间。
- 成员变量的隐藏:
- 变量只能被隐藏,不能被重写。
- 可以用子类的静态变量来隐藏父类的静态变量,也可以用子类的非静态变量隐藏父类的静态变量。
- 静态方法只能被隐藏不可被重写。
- 不能用子类的静态方法隐藏父类的非静态方法。
- 不能用子类的非静态方法覆盖父类的静态方法。
super两个用法:
调用父类的构造方法:
只能在子类的构造方法中。
必须在方法的第一句。
调用父类成员:
内存情况
super与this的区别:
final的用法:
- 修饰变量为常量值不可变。
- 修饰对象值可变,引用不变。
- 修饰方法,方法不可重写。
- 修饰类,无子类被称为最终类。不能被继承也不能重写。
多态和对象的上下转型:
java引用变量有两个类型一个是编译时类型,一个是运行时类型。
编译时类型由声明给该变量是使用的类型决定。
运行时类型由实际赋给该变量的对象决定。
如果编译时类型与运行时类型不一致就会出现多态。
向上转型:
应为子类其实是一种特殊的父类,所以可以把一个子类对象赋给一个父类引用变量,无须任何类型转换,被称为向上转型。
只有非静态方法才具有多态性,其余变量和方法都不具有多态性。
向下转型: