方法重写(Override)
又叫覆写,子类与父类的方法返回值类型一样、方法名称一样,参数一样,这样我们说子类与父类的方法构成重写关系。
方法重写与方法重载之间的关系:重载发生在同一个类内部的两个或多个方法。重写发生在父类与子类之间。
public class TestBook {
//运行java程序时,会把class加载到内存中
//java内存分为5个区域:方法区, 本地方法区, **堆**, **栈**, 寄存器
//栈内存:先进后出,堆内存,使用的是哈希表
//局部变量都存储在栈内存中,对象存储在堆内存中
//当方法出栈时,局部变量会消失
//堆内存中的对象不会消失,java有一个垃圾回收器,会不定时地回收垃圾
/*
new 关键字在生成对象时完成了三件事情:
1. 为对象开辟内存空间。
2. 调用类的构造方法。
3. 将生成的对象的地址返回。
*/
public static void main(String[] args) {
Book b = new Book(3);
b.name = "java";
Book b2 = new Book();
b2.name = "c";
b = b2;
System.out.println("你好" + b.name);
//System.gc(); //强行调用垃圾回收器gc = garbage collection
int a = 3;//基本数据类型都存储在栈内存中,引用数据类型存储在堆内存中
b.look();
}
}
public class Book {
String name;
public Book() {}
public Book(String name) {
this(1,2);
this.name = name;
System.out.println("没有参数的构造方法");
}
public Book(int a) {
this("abc"); //this() 表示调用当前类,没有参数的构造方法
//this()在构造方法中必须作为第一条语句,this()之前不能有任何可执行的代码。
System.out.println("有一个参数的构造方法");
}
public Book(int a, int b) {
System.out.println("有两个参数的构造方法");
}
public void look() {
int a = 3;
System.out.println(a);
look(30);
}
public void look(int a) {
System.out.println(a);
}
}