1.栈,堆,
1)public class Student{}类中没有定义任何方法,但是有一个它本身的构造方法 (构造器)
public class Student{
Stuent (){}
}
其中
Student(){}
就是构造函数(构造器)
2)创建对象时
public class Student {
Student A = new Student();
}
首先将A压入栈,将new Student()放入堆
new Student 有一个地址
在执行=(Studengt A=new Student)s时,将这个地址赋值给A(也就是说 A代表的是这个地址)
public class Test {
public static void main(String[] args) {
Student stu = new Student();
Student stu1 = new Student();
stu.name = "张三";
stu1.name = "李四";
stu = stu1;
stu.name = "王五";
System.out.println(stu.name);
System.out.println(stu1.name);
stu = new Student();
stu1 = stu;
stu="麻子";
System.out.println(stu.name);
System.out.println(stu1.name);
第一次都是输出 王五 第二次则为 麻子
2.重载
一个函数中可以定义多个 方法名一样 参数(指参数的类型或者顺序或者个数)不一样的 方法
public class Teacher {
public Teacher(){
}
public Teacher(int a){
}
public Teacher(String b){
}
public void teach(){
System.out.println("教学方法1");
}
public void teach(int a){
System.out.println("教学方法2");
}
public void teach(String a){
System.out.println("教学方法3");
}
public void teach(int a,String b){
System.out.println("教学方法4");
}
public void teach(String a,int b){
System.out.println("教学方法5");
}
}
上面 有多个名为teach的方法应为参数列表不一样所以是方法的重载(其实就是为了方便使用功能类似的方法处理不同类型的数据)
3.重写
重写得从继承开始讲
若类A的所有方法(私有和构造除外)类B都要, 则可以用
public class B extends class A{}
这时类B就是类A的子类,类A就是累B的父类
但是如果累A中的某些方法类B不想要,就可以用重写来解决
public class A {
public int add(int a,int b) {
return a+ b; }
}
public class B extends class A{
public int add(int a,int b) {
return a;
}
}
类B继承类A,如果累B中没有重写add,那么在类B中用add可以计算出a+b的值,但是累B中重写了add
public int add(int a,int b) {
return (int a)
}
所以在类B中用add只能得到最开始输入的那个数a。