JAVA中的存储机制
堆内存:放的是对象本身
栈内存:放的是基本类型数据的值,引用类型
方法区:static修饰的变量 和方法
多个引用指向同一个对象(气球理论)
Student s1=new Student();
Student s2=s1;
解读:将s1引用赋值给s2,此时s1和s2都指向同一个对象
多个引用指向同一个对象,只要其中一个引用对其发生改变,其他引用也会随之发生改变(这与定义变量指向的内存概念不一样)
继承的特点:
- 单继承:一个父类可以有多个子类,但一个子类只能有一个父类
- 多重继承:子继承父 父继承爷爷
- 子类的功能要比父类更强大(子类可对父类进行拓展)
继承的好处:
- 提高了代码的复用性
- 让类与类产生了关联,为后面实现多态提供了前提条件。
子类A继承父类B ,子类A可以获得父类的所有的属性和方法。当父类的属性private'私有化',子类继承父类后,仍然可以获得父类的私有结构,只不过受封装性的影响,不能直接获得父类私有的属性(这时可以用get/set方法操纵父类属性)。
继承的弊端:
违背了软件工程理念:低耦合高内聚(耦合度高就会造成代码之间的联系越紧密,代码独立性越差)
注意:构造函数不能被继承,即子类不会继承任何父类的构造方法(函数)。子类默认的构造方法是编译器自动生成的,不是继承的。
此外:
- java的单继承,可以多层继承.
- 字符类是相对的概念
- 子类继承父类之后,可以获取直接父类和间接父类所偶有的属性和方法。便于扩展
- 没有显示定义的父类,则此类继承Object类
可以用:@Override
标识符来检测重写父类的方法是否正确
继承的实现
使用extends
关键字来继承
语法:
class 父类 {
}
class 子类 extends 父类 {
}
super
与 this
关键字
super
关键字:
- super理解为:父类的
- super可以用来调用:属性、方法、构造器
super的使用:调用属性和方法
3.1 我们可以在子类的方法或构造器中。通过使用"super.属性"或"super.方法"的方式,显式的调用父类中声明的属性或方法。但是,通常情况下,我们习惯省略"super."
- 3.2 特殊情况:当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显式的使用"super.属性"的方式,表明调用的是父类中声明的属性。
- 3.3 特殊情况:当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,则必须显式的使用"super.方法"的方式,表明调用的是父类中被重写的方法。
super调用构造器
- 4.1 我们可以在子类的构造器中显式的使用"super(形参列表)"的方式,调用父类中声明的指定的构造器
- 4.2 "super(形参列表)"的使用,必须声明在子类构造器的首行!
- 4.3 我们在类的构造器中,针对于"this(形参列表)"或"super(形参列表)"只能二选一,不能同时出现
- 4.4 在构造器的首行,没有显式的声明"this(形参列表)"或"super(形参列表)",则默认调用的是父类中空参的构造器:super()
- 4.5 在类的多个构造器中,至少有一个类的构造器中使用了"super(形参列表)",调用父类中的构造器
this
关键字:
- 可以调用的结构:属性、 方法、构造器
this调用属性、方法,this修饰方法和属性,理解为当前的对象,或者当前正在创建的对象
- 在类中可以使用this.属性this.方法。调用当前对象的属性,一般情况可以省略。特殊情况当方法的形参跟类的属性同名。使用this表示当前类的属性不可以省略
- 在类的构造器中可以使用this.属性this.方法。调用当前对象的属性。 一般情况可以省略。特殊情况当方法的形参跟类的属性同名。使用this表示当前类的属性不可以省略
3、this调用构造器
- 在类的构造器中,使用this(形参列表的方式)显示调用当前类的其他构造器。
- 构造中不能通过this(形参列表方式)调用自己
- 必须在构造器的首行
- 再一个构造中只能声明一个this(形参),调用其他构造器
- 一个类中有n个构造器,最多有n-1个使用了this()
权限修饰符(访问控制符)
如下图:
例如:
public String name;
protected int age;
(不写为默认) String gender;
private String hobby;